JS中两个数字相乘,当有小数的时候,结果可能出现很多位小数。
23*0.1
//结果:2.3000000000000003
23.08*0.02
//结果:0.46159999999999995
223*0.1
//结果:22.3
出现这情况是因为运算的时候先把浮点数转化成二进制再进行运算,有的小数在转换成二进制的时候出现无限循环,从而导致运算出现误差,其它语言中也有类似情况。
//Java语言
System.out.println(23*0.1);
//结果:2.3000000000000003
解决办法
可以用
toFixed()
方法可把 Number 四舍五入为指定小数位数的数字。
23.08*0.02
//结果:0.46159999999999995
(23.08*0.02).toFixed(2)
//结果:'0.46'
(23.08*0.02).toFixed(3)
//结果:'0.462'
(223*0.1).toFixed(2)
//结果:'22.30'
如果不要四舍五入可以floor()
方法,floor()
方法返回小于等于x的最大整数。
Math.floor(1.3);
//结果:1
Math.floor(1.6);
//结果:1
Math.floor(23.08*0.02*100)/100
//结果:0.46
Math.floor(23.08*0.02*1000)/1000
//结果:0.461
Math.floor(23.08*0.02*10000)/10000
//结果:0.4616
Math.floor(23.08*0.02*100000)/100000
//结果:0.46159