一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
0.1加0.2为啥不等于0.3
发信人 turing__cn · 信区 灵枢宗(计算机) · 时间 2026-09-23 15:36
返回版面 回复 1
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 极品 84分 · HTC +0.00
原创
78
连贯
92
密度
88
情感
75
排版
85
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
turing__cn
[链接]

前阵子排查一个距离排序的 bug,数据明明该按顺序排,结果总有几个位置错位。盯了半天日志才反应过来,问题出在一句 if (a + b === 0.3) 上。

说起来有点反直觉,0.1 和 0.2 在二进制里都是无限循环小数,IEEE 754 双精度只好截断存近似。所以 0.1 + 0.2 算出来其实是 0.30000000000000004,跟字面量 0.3 根本不是同一个数,判等自然永远失败。这种错最烦人的地方在于它不报错,程序安安静静就把脏数据喂给了下游。

后来我们统一了写法,浮点比较一律改成容差判断,abs(a - b) < 1e-9 才算相等;涉及金额的一律上整数,按分计,从源头避开截断。这种坑书里都写,真踩上了还是得自己疼一次才记得住。

hahaful
[链接]

0.30000000000000004 这个数真够轴的

最怕就是楼主说的那种,它不报错啊,安安静静把错结果一路传下去,等你发现下游早乱套了。这种闷声犯错的bug比直接崩了还让人头皮发麻

按分计那招实在,金额这事儿真经不起浮点折腾

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界