javascript - js小数相加问题
大家讲道理
大家讲道理 2017-04-11 12:45:11
[JavaScript讨论组]
console.log(0.1 + 0.2 == 0.3) // false
console.log(0.2 + 0.2 == 0.4)
console.log(0.1 + 0.3 == 0.4)
console.log(0.13 + 0.2 == 0.33)
console.log(0.3 + 0.4 == 0.7)
console.log(1.1 + 0.2 == 1.3)

我知道 0.1 + 0.2 = 0.30000000000000004 ,但想知道为什么。
问题分两层:1,为什么第一条输出false;2,为什么其他输出true。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(5)
PHPz

假设十进制数字为整数10,在计算机中表示方式为 : 1010,二进制转换十进制的方法为:

1 * 2^3 + 0 * 2^2 + 1* 2^1 + 0* 2^0 = 10

即为:

8 + 0 + 2 + 0 = 10

那么小数的表示方法,假设10进制数为0.5,在计算机中表示为0.1,因为计算机只有0和1这两位,而换算方法为:

1 * 2^-1 = 0.5

同理可见计算机能表示的浮点数有哪些 :

    0.5 = 1 * 2^-1
    0.75 = 1 * 2^-1 +1 * 2^-2
    0.25 = 0 * 2^-1 +1 * 2^-2
    0.875 = 1 * 2^-1 +1 * 2^-2 + 1 * 2^-3
    0.9375 = 1 * 2^-1 +1 * 2^-2 + 1 * 2^-3 + 1 * 2^-4 

同理可见,0.2在计算机中表示为 :

 0.00110011000110...

后续位数你可以自己算,所以在计算机中0.2的表示方法只是一个无线接近于0.2的小数,但永远无法精确的表示出0.2,所以0.2 + 0.1 ≈ 0.3,而永远不会等于0.3

PHPz

随手算一下不就知道了么

伊谢尔伦

这是一个日常题目啊。。。

送你一个链接,你去看看吧。

https://www.zhihu.com/questio...

大家讲道理

总结一下。
有种机器只能认4位小数,而且对一部分分数并不能很准确的转化为小数。 而人类习惯用分数。
那么1/3+2/3等于多少?
机器:0.3333+0.6666=0.9999!=1

巴扎黑

二进制不能精确表示浮点数,浮点数问题不是js独有的,其他语言都有

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号