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

前阵子帮朋友理一笔小账,顺手在程序里写了句 0.1 加 0.2,心里笃定答案该是 0.3。谁料屏幕跳出来的却是 0.30000000000000004,小数点后拖着一条长长的尾巴,怎么看怎么别扭。

后来才慢慢琢磨出味道来:机器认的是二进制,0.1 落进去成了除不尽的循环小数,塞不进那个小小的格子,只能近似着收着。几个数一路加下去,误差便悄悄攒起来,像凉茶续了又续,味儿就淡了。最怕的还是拿等号去判"相等",那点微末的偏差,足以让判断全盘落空。你若不信,在控制台敲一行 0.1+0.2 试试,多半要愣上一愣。

如今碰上钱、积分、计量这类要紧事,我宁可把元化作分、拿整数一寸寸数,或是请出 decimal、用个容差去比。机器向来诚实,只是它的诚实,和我们想的不太一样。

lol18
[链接]

楼主那句’凉茶续了又续味儿就淡了’太戳我了。6我前阵子在外头帮人核一笔零散的杂账,也是在表里啪啪一加,小数点后飘一串尾巴,当时还以为自己手抖输错了,重敲三遍还是一个样,给我看乐了。

这玩意儿真防不胜防。我的土办法跟楼主差不多,能整数就不小数,算钱一律换算到最小单位去加。离谱decimal我是偷懒没怎么用,嫌麻烦 hhh 但容差那个思路我是真服,判断相等确实不能硬杠等号,差那么一丢丢全盘就翻车。
话说
不过话说回来,我觉得最要命的不是算不准,是那种’明明看着该对却不对’的错愕。屏幕冷不丁告诉你1+1不是2的时候,那一秒还真有点恍惚。想开了其实也挺浪漫的,机器有它自己的诚实,不撒谎,只是跟你想的不太一样,跟人似的。

你们是不是早就被这事儿腌入味了,第一次撞见的时候啥反应?

noodle2006
[链接]

凉茶续杯那句给我看乐了 现在碰钱我都直接乘100当分算 多一位都不想看见

poet_963
[链接]

读你这段文字,我忽然想起小时候在莫斯科的冬天,对着窗玻璃哈一口气,用手指画一道道线。看着清清楚楚的,可一转眼就散了,只留一点湿痕在玻璃上。那时只觉得可惜,后来才慢慢懂,有些东西本就收不成一个干脆的整数。

你说的"机器的诚实和我们想的不太一样",倒叫我松了口气。人大约也是这样——我们总以为感情、承诺、记忆都该是整整齐齐的 0.3,可日子里那些微不足道的偏差一路攒下去,到头来才是真的。偏要拿一个等号去判,反而什么都对不上。

Хорошо,就由它拖着那条长尾巴罢。0.30000000000000004 也挺好看的,像黄昏时候天边慢慢淡下去的那一道光。

scoop_dog
[链接]

你们知道吗,我倒没那么在意0.1+0.2那点尾数,更好奇你帮哪个朋友理的那笔账!这事由头起得有点怪,背后该不会还藏着别的什么事吧?

lifter
[链接]

这坑我前段时间也踩了,盯着那串尾巴怀疑自己算错(笑)。整数化分这招真的稳,钱的事儿差一厘都闹心,干就完了,别跟浮点数较劲。

veteran_ive
[链接]

我年轻的时候也认死理,总觉得屏幕上跳出来的数字就是板上钉钉。后来帮家里记过一阵账,几笔零头加加减减,月底愣是对不上几分钱,折腾半天才认了,有些"准"本来就是凑出来的。楼主这法子把元化成分去数,倒是实在。

potato_81
[链接]

上次算聚餐AA也栽在这上头 哈哈 俩人为了几毛钱掰扯半天 现在钱的事我全乘100拿整数数 省心

vibes_980
[链接]

分算最稳 我搞钱也爱用整数 那串尾巴看着是真眼晕

leak9
[链接]

我盯着你那句"帮朋友理一笔小账"看了半天,越看越觉得这账背后没那么简单。一般谁会专门写个程序去试 0.1 加 0.2 啊,肯定是真碰上钱数对不上的事才较真。你这朋友是做生意哪笔款算岔了,还是几个人分账分不明白来找你救场的?我怎么听说的版本不太一样,总觉得没这么简单。对了

你要是真为钱的事犯愁,我给你补个料:0.1 加 0.2 蹦尾巴这个毛病,真不是某一个语言的锅。我听搞这行的人聊过,是底层那套数字怎么存的规定(好像叫 IEEE 什么标准)早年就这么定的,为了速度和能表示的范围就将就了。所以你换 Python、Java、JS 全一个样,都会拖那条小尾巴。

你最后那个"把元化作分、拿整数数"的土法子,我倒真有点共鸣。我以前摆摊送外卖那阵子,算账从不敢碰小数,几块几毛全记成整数,月底再统。机器诚实归诚实,真到钱上头还是信自己手里的账本踏实。

有个事不知道该不该说,你那朋友最后对账对上了没?我挺好奇这账到底差出去多少,才让你专门写这么一篇。

whisper24
[链接]

你们知道吗,我前阵子也撞上过一模一样的事,当时盯着屏幕愣了好几秒,还以为自己眼花了。不过我更好奇的是你那位朋友到底在理什么账——是AA聚餐的零头,还是什么别的小数目?我怎么感觉这背后说不定还有点故事 ( ̄▽ ̄)
嘿嘿
说回0.1+0.2这个,我听说真有人因为浮点误差吃过大亏:早年有笔对账怎么都对不上,折腾半天发现是机器在"诚实"地使坏。所以你后面说的把元化作分、用decimal比容差,really makes sense,这个思路我记下了。

有个事不知道该不该说,我听另一个朋友讲,现在有些语言其实已经悄悄把这类小数处理得"圆滑"了不少,具体是哪个我就不点名了,先卖个关子。离谱你们有没有踩过更离谱的坑,说来听听?

surf__841
[链接]

拿整数分来数钱这招真稳,我店里定价全按整数分走…,从没在账上栽过跟头。Genau!

flex_ist
[链接]

这波给满分!判相等别用等号这点太关键,小数比大小得请容差出场

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