如何处理JavaScript中的浮点数精度?

我有以下虚拟测试脚本:

函数测试(){
var x=0.1*0.2;
文件。编写(x);
}
test()

这将打印结果0.0200000000000000004,而只打印0.02(如果使用计算器)。据我所知,这是由于浮点乘法精度错误造成的

是否有人有好的解决方案,以便在这种情况下我得到正确的结果0.02?我知道有一些函数像toFixed或舍入是另一种可能,但我真的希望在不进行任何切割和舍入的情况下打印整个数字。我只是想知道你们当中是否有人有好的,优雅的解决方案

当然了,否则我会把数字调到10位左右

从浮点指南:

如何避免此问题?

这取决于什么样的环境
你正在做的计算

  • 如果你真的需要把结果加起来,特别是当你
    与钱打交道:使用特殊的小数点
    数据类型
  • 如果你只是不想看到那些额外的小数位:简单地说
    将结果四舍五入为固定格式
    输入时的小数位数
    展示它
  • 如果没有可用的十进制数据类型,另一种方法是工作
    使用整数,例如domoney
    计算完全以美分为单位。但是
    这是更多的工作,并有一些
    缺点

请注意,第一点仅在您确实需要特定的精确十进制行为时适用。大多数人不需要这样,他们只是对他们的程序不能正确处理1/10这样的数字感到恼火,而没有意识到如果发生1/3这样的错误,他们甚至不会眨眼

如果第一点确实适用于您,请使用BigDecimal for JavaScript,它一点也不优雅,但实际上解决了问题,而不是提供一个不完善的解决方法

发表评论