我有以下虚拟测试脚本:
函数测试(){
var x=0.1*0.2;
文件。编写(x);
}
test()
这将打印结果0.0200000000000000004,而只打印0.02(如果使用计算器)。据我所知,这是由于浮点乘法精度错误造成的
是否有人有好的解决方案,以便在这种情况下我得到正确的结果0.02?我知道有一些函数像toFixed或舍入是另一种可能,但我真的希望在不进行任何切割和舍入的情况下打印整个数字。我只是想知道你们当中是否有人有好的,优雅的解决方案
当然了,否则我会把数字调到10位左右
从浮点指南:
如何避免此问题?
这取决于什么样的环境
你正在做的计算
- 如果你真的需要把结果加起来,特别是当你
与钱打交道:使用特殊的小数点
数据类型- 如果你只是不想看到那些额外的小数位:简单地说
将结果四舍五入为固定格式
输入时的小数位数
展示它- 如果没有可用的十进制数据类型,另一种方法是工作
使用整数,例如domoney
计算完全以美分为单位。但是
这是更多的工作,并有一些
缺点
请注意,第一点仅在您确实需要特定的精确十进制行为时适用。大多数人不需要这样,他们只是对他们的程序不能正确处理1/10这样的数字感到恼火,而没有意识到如果发生1/3这样的错误,他们甚至不会眨眼
如果第一点确实适用于您,请使用BigDecimal for JavaScript,它一点也不优雅,但实际上解决了问题,而不是提供一个不完善的解决方法