1 小数计算bug:
console.log( 1 - 0.8 ); //输出 0.19999999999999996
console.log( 6 * 0.7 ); //输出 4.199999999999999
console.log( 0.1 + 0.2 ); //输出 0.30000000000000004
console.log( 0.1 + 0.7 ); //输出 0.7999999999999999
console.log( 1.2 / 0.2 ); //输出 5.999999999999999
通过上面举出的例子可以看到,原生的js运算结果不一定准确,会丢失精度。
2 产生原因:
计算机能读懂的是二进制,进行运算的时候,实际上是把数字转换为了二进制进行的 这个过程 丢失了精度
3 通常的解决方法 计算之前*10的N次方 计算之后在除10的N次方
例如: console.log(1-0.8); 变为 console.log((1 * 10 - 0.8 * 10) / 10);
但是: 9033742.2*100 ----->903374219 (还是有一些特殊情况 不能直接*10的n次方)
4 根据上述原理 做一下修改小数点截取转数字在计算,可以封装一些方法出来解决此类问题。如下所示(Math.pow(x, y);表示求x的y次方):
function floatAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(
js小数计算丢失精度问题解决方法
最新推荐文章于 2025-03-26 01:45:31 发布