JavaScript精度

关于这个话题已经说了很多,但我无法找到问题的确切答案.

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还是我错过了什么?

最佳答案 任何使用IEEE 754浮点数的语言数学都会遇到与您在JavaScript中看到的相同的舍入问题.

某些语言(如C#)提供了一个Decimal类型,它具有更准确的数学处理,交换范围的十进制精度.

在JavaScript中有一些不同的浮点库,例如BigDecimal,但由于它们没有被烘焙到语言中,因此不能使用常规数学运算符,例如和*.

点赞