在 Javascript 中处理浮点精度大.js

我在javascript中有大量的数值。我想通过将它们向下舍入到最接近的倍数来对它们进行分组,并将结果转换为字符串。yx

如何绕过恼人的浮点精度?

例如:

0.2 + 0.4 = 0.6000000000000001

我尝试过两件事:

>>> y = 1.23456789 
>>> x = 0.2 
>>> parseInt(Math.round(Math.floor(y/x))) * x; 
1.2000000000000002

和:

>>> y = 1.23456789 
>>> x = 0.2 
>>> y - (y % x)
1.2000000000000002

答案 1

来自这篇文章:如何处理JavaScript中的浮点数精度?

您有几种选择:

  • 对小数使用特殊数据类型,如十进制.js
  • 将结果的格式设置为一些固定的有效位数,如下所示:(Math.floor(y/x) * x).toFixed(2)
  • 将所有数字转换为整数

答案 2

你可以做这样的事情

> +(Math.floor(y/x)*x).toFixed(15);
1.2

编辑:最好使用大.js。

大.js

一个小型、快速、易于使用的库,用于任意精度的十进制算术。

>> bigX = new Big(x)
>> bigY = new Big(y)
>> bigY.div(bigX).round().times(bigX).toNumber() // => 1.2