我有以下虚拟测试脚本:
function test() {
var x = 0.1 * 0.2;
document.write(x);
}
test();
这将打印结果 0.020000000000000004
而它应该只打印 0.02
(如果您使用计算器)。据我了解,这是由于浮点乘法精度的错误。
有没有人有一个好的解决方案,以便在这种情况下我得到正确的结果 0.02
?我知道有像 toFixed
或四舍五入这样的功能是另一种可能性,但我希望真正打印整数而不进行任何切割和四舍五入。只是想知道你们中的一个人是否有一些不错的、优雅的解决方案。
当然,否则我会四舍五入到 10 位数左右。
原文由 Juri 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 浮点指南:
请注意,仅当您确实需要特定的精确 小数 行为时才适用第一点。大多数人不需要这个,他们只是对他们的程序不能正确处理像 1⁄10 这样的数字感到恼火,却没有意识到如果出现 1/3,他们甚至不会因同样的错误而眨眼。
如果第一点真的适用于您,请 为 JavaScript 使用 BigDecimal ,它一点也不优雅,但实际上解决了问题,而不是提供了一个不完美的解决方法。