gpt4 book ai didi

JavaScript:为什么是 58 * 0.1 = 5.800000000000001 (而不是 5.8)

转载 作者:行者123 更新时间:2023-12-02 19:28:45 24 4
gpt4 key购买 nike

Possible Duplicate:
Is JavaScript's Math broken?

...我能做什么呢?计算后我想要结果的字符串表示形式。因此,零(加上一)是去扰动的。 “toFixed()”不是一个完美的解决方案,因为我想要获得潜在结果的所有(正确)小数位,并且我之前不知道结果(以及小数位数)。所以上面的计算只是一个例子。

最佳答案

简短的回答是:计算机以二进制表示数字,因此它们无法将所有以 10 为基数的分数完美地表示为 JavaScript 数字。

(稍微)更长的答案是,因为 JavaScript 数字是 64 位浮点(相当于 Java、C# 等中的 double 类型),正如 Wikipedia 所描述的 here ,有效数字位的数量有限。因此,这个以 2 为基数的数字的精度是有限的。

打个比方,考虑以 10 为基数表示分数 1/3。假设您只有这么多数字可供使用。这意味着您永远无法精确地以 10 为基数表示 1/3,因为 1/3 需要无限多个数字才能以 10 为基数表示。同样,您永远无法完美地表示 1/10在有限位数中,因为 1/10 需要无限位数才能准确表示。您在这里看到的是计算机无法用有限位数精确表示的分数 (58/10),因此计算机正在尽可能接近。

关于JavaScript:为什么是 58 * 0.1 = 5.800000000000001 (而不是 5.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com