JS小数精度问题

var two   = 0.2
var one   = 0.1
var eight = 0.8
var six   = 0.6
[two - one == one, eight - six == two]

结果是true, false

clipboard.png

为什么two - one == onetrue?
为什么 0.2-0.1=0.1没有精度问题?

阅读 3.9k
3 个回答

0.2 - 0.1 == 0.1 0.8 - 0.6 == 0.20000000000000007
js精度肯定有问题 浮点嘛 懂得自然懂

你可以看下我的这篇文章:
浮点数计算坑人的原理
文章节选的一部分:
大家都知道计算机要用二进制表示,基本的十进制和二进制的换算应该都清楚。例如:
0.5(十进制) = 0.1(二进制),因为2^-1是0.5。
0.25(十进制) = 0.01(二进制),因为2^-2是0.25。
那0.2呢,怎么表示呢,表示不出来啊。那就只能找个最接近的近似值来代表。
所以0.2的二进制小数是0.0011001100110011.......,也就是(2^-3)+(2^-4)+(2^-7)+(2^-8)+.....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题