关于这个话题已经说了很多,但我无法找到问题的确切答案。
JavaScript无法准确表示0.1等十进制数,这是可以理解的。
例如,由于在复用过程中出现舍入错误,这是正确的:
0.1 * 3 === 0.30000000000000004
这很好 - 所有这些都符合IEEE浮点运算标准(IEEE 754)。
我无法理解的是为什么其他使用该标准的语言也能提供更准确的测量
0.1 * 3 === 0.3
这是因为他们使用了不同的roundng规则吗? https://en.wikipedia.org/wiki/IEEE_floating_point#Rounding_rules或者我错过了什么?
答案 0 :(得分:2)
使用IEEE 754 Floating Point
的任何语言数学都会遇到与您在JavaScript中看到的相同的舍入问题。
某些语言(例如C#
)提供Decimal
类型,其具有更准确的数学处理,交换范围的小数精度。
在JavaScript中有一些不同的浮点库,例如BigDecimal,但由于它们没有被添加到语言中,因此不能使用常规数学运算符,例如+
和*
。