自动四舍五入???

image.png

阅读 1.5k
2 个回答

因为精度丢失。

Javascript 的数字只有Number类型,采用IEEE 754标准中 64位双精度浮点数的存储格式。

  • 符号位(1位)
  • 指数(11位)
  • 小数(52位)

将十进制的数字转为二进制存储时,超过有效数字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"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题