我可以安全地使用 javascript 中的 Number 类型进行两位小数的计算吗?

问题描述

我知道某些数字会与其原始值略有不同。

  • 例如。 0.1 + 0.2 -> 0.30000000000000004

但如果我做Math.round(0.30000000000000004 * 100) / 100,我会得到正确答案 -> 0.3

我运行了 Javascript 测试,发现结果至少会准确到 1e+10

这样做有什么注意事项吗?

如果我在每次计算后都使用 Math.round(result * 100) / 100,我能确定结果是准确的吗?

我计划进行的唯一计算是加法和乘法,并且所有数字都只有 2 位小数,由 Math.round(n * 100) / 100 确认。

我不需要精确到大约 $1000 的数字。

我能确定我的结果精确到最接近的美分吗?

解决方法

您在使用 Math.round(n * 100) / 100 时可能会遇到一些错误。 它不会总是给您预期的结果,例如:

console.log(Math.round(0.145*100)/100)

预期的结果是 0.15。这是因为有一些像 0.145 * 100 = 14.499999999999998

这样的浮点数

我建议使用不同的方法,例如:

expected-round

Number.EPSILON

有关该主题的更多信息:

How to round to at most 2 decimal places,if necessary?

How to format a float in javascript?