一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
0.1+0.2,差之毫厘
发信人 azureous · 信区 灵枢宗(计算机) · 时间 2026-10-04 13:57
返回版面 回复 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
情感
90
排版
85
主题
95
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
azureous
[链接]

昨儿在深圳租的房子里对账,盯着屏幕发了半天呆。一笔笔交易加下来,总账硬是差出去几分钱。起初当是哪条记录漏了,翻了小半天,才想起这桩事:0.1加0.2,计算机给的答案是0.30000000000000004。坦白讲

二进制揣摩不透十进制的五分之一、十分之一,它尽力了,可惜天生凑不齐。你眼睛看着两边一样,程序却在角落里悄悄判定「不相等」,某个本该走的条件分支就这么静默地没走。千把笔累积下来,那几分钱的缺口就扎下了根,回头去溯,像在大雾里摸一粒芝麻。

后来学乖了。钱的事,一律拿整数分或者 Decimal 来算,绝不拿 float 去碰。比较也不写等号了,改成 abs(a-b) 小于一个很小的 eps,给误差留条活路。单位换算只在系统门口做一次,里外都不混着来。Genau! 道理朴素,踩过一回才刻进骨头里。

有些坑,非得自己掉一回,才记得住。

null2003
[链接]

深圳对账这茬我太熟了,我自己开店也是一笔笔对过来的。
简单说
补一句:你这两套法子其实不重叠。钱用整数分或者 Decimal,就别再拿 eps 去比了。Decimal 是精确十进制,直接等号就稳,eps 是给还赖在 float 上的人留的退路。真要对账,整数分最干净,连 Decimal 的舍入规则都不用惦记。

我内部全程走整数,只在显示那一下除以 100,半年没再对出过差。

yolo_jp
[链接]

钱一律拿整数分算这条我存下了 几分钱的闷亏谁爱吃谁吃

haiku__q
[链接]

读完那句"像在大雾里摸一粒芝麻",手指在屏幕上停了好一会儿。

我在想,这大概是最干净的一种"明明一样却不相等"了。人看过去,两边都写着0.3,分毫未差;可底下的东西早就错开了,只是不出声。你最后说有些坑得自己掉一回才记得住,可我倒觉得这坑不疼,它很轻,只是悄悄把你信以为真的那点"确定"抽走了一根丝。话说回来

钱还能拿整数分去救,可生活里许多事没有Decimal。眼睛说的一样,心里说的一样,某个本该走的分支却静默地没走成,回头去溯,连芝麻都摸不到。

夜里偶尔想起这个0.30000000000000004,觉得它比许多道理都老实。

maple_213
[链接]

盯着屏幕发呆那段太真实了,几分钱的事愣是较真半天。踩过的坑才真正算自己的,道理人人都懂,真记住还是得靠自己摔一跤。

tensor2005
[链接]

Decimal 也别想得太美,光换类型救不了你。得显式 quantize(量化)加舍入模式,不然 1/3 这种除不尽的照样漂。钱我还是信整数分,只在展示层除 100。

echoous
[链接]

“在大雾里摸一粒芝麻”,这句读着心里一紧。

我在海外待了十年,最怕的也是这种细微处的错位。账面上的几分钱像极了记忆里的偏差——你以为清清楚楚记着家乡巷口的风,真站回去才发现砖缝都换了颜色。二进制装不下十进制的圆满,人也一样,总有些东西是凑不齐的。

我觉得吧给误差留条活路,听着倒像是某种慈悲了。

lazy_sr
[链接]

几分钱听着不多 但那种明明看着一样就是判不相等的无力感太真实了。我现在写代码看到浮点数心里都发怵,能转整数的坚决不碰小数

truth_hk
[链接]

钱的事拿 float 去碰,基本等于拿沙子砌墙,塌是早晚的。我刚北漂那会儿合租,室友拿 Excel 记分摊,三个人愣是能算出三种总数,最后还互相怀疑对方偷喝牛奶。后来我学乖了,一律整数分,账目清清楚楚,友谊也保住了。你这个 eps 留活路的做法挺稳,单位换算门口一次性搞定更是老手习惯,碰过钉子的人才会这么写。

elder_2006
[链接]

想当年我对账差了三毛钱,翻了一整晚记录,最后发现是 float 干的,气得泡了壶茶才冷静下来。Excel 里 0.1+0.2 也一样露馅,不信你试试。钱走整数分这条铁律,我守到现在没破过例。

sleepy_519
[链接]

大雾里摸芝麻这比喻太贴了…我上次为了查几分钱误差熬到凌晨三点,头发掉了一地。整数分永远的神

insider75
[链接]

我听说某大厂早年做跨境支付,就因为这浮点数精度被薅过羊毛。后来内部严令所有金额字段必须用Decimal,连中间件都做了拦截。你们现在的项目里,这种坑是靠Code Review硬盯,还是有什么自动化检测工具兜底?

sleepy_761
[链接]

哈哈 我当年在部队搞装备台账也是这毛病,几百万的东西差两分钱查了一宿 后来班长说直接拿Excel算,整型存分,世界清净了。
现在看到float就脑壳疼,写代码恨不得拿计算器摁一遍再落库…你们还在用Decimal吗

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