小编典典

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

all

我有以下虚拟测试脚本:

function test() {

  var x = 0.1 * 0.2;

  document.write(x);

}

test();

这将打印结果0.020000000000000004,而它应该只打印0.02(如果您使用计算器)。据我了解,这是由于浮点乘法精度的错误。

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

当然,否则我会四舍五入到 10 位数左右。


阅读 143

收藏
2022-03-02

共1个答案

小编典典

浮点指南

我能做些什么来避免这个问题?

这取决于你在做什么样的计算。

  • 如果您确实需要将结果精确地相加,尤其是在使用金钱时:使用特殊的十进制数据类型。
  • 如果您只是不想看到所有这些额外的小数位:只需在显示结果时将结果格式化为固定的小数位数。
  • 如果您没有可用的十进制数据类型,另一种方法是使用整数,例如完全以美分计算货币。但这是更多的工作并且有一些缺点。

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

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

2022-03-02