因为精度丢失。
Javascript 的数字只有Number
类型,采用IEEE 754标准中 64位双精度浮点数的存储格式。
将十进制的数字转为二进制存储时,超过有效数字64位的,会被舍入(0舍,1入)。精度丢失。
读取时转为十进制,Javascript 数字最高精度是16位。如果整数部分是0,则小数部分保留16位(四舍五入);如果不为0,则整体保留16位(四舍五入)。精度丢失。
在你的例子中,27.969999999999999
==>二进制==>十进制==>27.97
而你看到的27.969999999999999
不是真正的27.969999999999999
,用toPrecision
可以看到数值的更高精度:
a.toPrecision(20) // "27.969999999999998863"
c.toPrecision(20) // "112.34323200000000043"
var b = 27.97
b.toPrecision(20) // "27.969999999999998863"
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
https://0.30000000000000004.com/
https://developer.mozilla.org...
在 JavaScript 中, Number 是一种 定义为 64位双精度浮点型(double-precision 64-bit floating point format) (IEEE 754)的数字数据类型。
https://zh.wikipedia.org/wiki...