如何实现JavaScript中精确的加减乘除运算?
- 内容介绍
- 文章标签
- 相关推荐
本文共计654个文字,预计阅读时间需要3分钟。
在CRM系统中,二代审核核需详细页面显示时,JS无法进行精确计算,存在bug。例如,在输入数值时,需要按比例(后端传值类似0.8的小数)将用户输入的数字以不同方式展示。在dubheInvest=invest * (1 - ratio); 运算中,发现计算时出现异常。
JS无法进行精确计算的bug
在做CRM,二代审核需求审核详情页面时。需要按比例(后端传类似0.8的小数)把用户输入的数字显示在不同的地方。
在做dubheInvest = invest * (1 - ratio);运算时发现问题。具体如下:
示例代码:
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运算结果不一定准确,会丢失精度。
解决方案
解决方案的原理是,将浮点数乘以(扩大)10的n次方倍,把浮点数变为整数后再进行相应的运算,最后将得到的结果除以(缩小)10的n次方倍。
本文共计654个文字,预计阅读时间需要3分钟。
在CRM系统中,二代审核核需详细页面显示时,JS无法进行精确计算,存在bug。例如,在输入数值时,需要按比例(后端传值类似0.8的小数)将用户输入的数字以不同方式展示。在dubheInvest=invest * (1 - ratio); 运算中,发现计算时出现异常。
JS无法进行精确计算的bug
在做CRM,二代审核需求审核详情页面时。需要按比例(后端传类似0.8的小数)把用户输入的数字显示在不同的地方。
在做dubheInvest = invest * (1 - ratio);运算时发现问题。具体如下:
示例代码:
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运算结果不一定准确,会丢失精度。
解决方案
解决方案的原理是,将浮点数乘以(扩大)10的n次方倍,把浮点数变为整数后再进行相应的运算,最后将得到的结果除以(缩小)10的n次方倍。

