
字节笔记本
2026年10月7日 · 约 6 分钟读完
对齐之后九点八更大
9.11 和 9.8 比大小,整数部分都是 9。小数部分要对齐到同一位,再比。第一段回答把小数点后面的 11 和 8 当成两个整数,得出 9.11 更大,还写差了 0.31。把用户追问之后的第二段才把方向改过来:9.8 更大。

第一段把位数当成了整数
第一段说,小数点后 11 比 8 大,所以 9.11 大于 9.8。又把两数写成 9.110 和 9.800,并说这样更容易看出 9.11 比 9.8 大 0.31。对齐写成三个小数位,这件事本身是对的。比出来的方向是错的。9.800 减去 9.110 等于 0.690,不是 0.310,而且是 9.800 更大。0.31 来自把 11 减 8,再在前面点上小数点。那不是这两个小数的差。11 是百分位和千分位上的 1 和 1,数值是百分之十一。8 若只写一位,是十分位上的 8,数值是十分之八。十分之八等于百分之八十,大于百分之十一。
把 9.8 补成 9.80 或 9.800,右边的零不改变数值,只让位数对齐。补零之后不能再把 110 和 800 的字面谁更长当成谁更大已经比完。要看的是对齐之后从左到右第一处不同的数字。十分位上,1 小于 8。后面的位数不用再看。所以 9.110 小于 9.800。
第二段按数位拆开
第二段把两数拆成整数加小数:9.11 是 9 加 0.11,9.8 是 9 加 0.8。整数相等。0.8 写成 0.80,0.11 小于 0.80。因此 9.8 大于 9.11。这一段和第一段的结论相反。以第二段为准。第一段的补零展示可以留下,结论和差值要换掉。
在程序里不要用字符串比较小数的“看起来谁大”。这一对若按字典序,小数点后第一位 1 小于 8,碰巧方向对,换一对数字就会翻。应把文本转成数值再比。9.8 减 9.11 的结果是正的 0.69。用整数比较时,先乘上同一个 100:980 和 911,980 更大。乘数要覆盖你保留的小数位。只乘 10 会把 9.11 截断,不能用。

口头和代码用同一种对齐
口头说的时候,先补到同样的小数位,再从十分位看。代码里用数值或定点,不用小数点后那一串的整数值。11 大于 8 只说明那两个整数,不说明 9.11 和 9.8。第一段里的 0.31 不要再引用。用户只说了再想想,第二段就改了方向。改方向时把差值一起改掉,不要只改大于小于、留下原来的 0.31。
十分位、百分位、千分位的权重不同。9.8 只写到十分位,那一位是 8,表示十分之八。9.11 的十分位是 1,百分位是 1,合起来是百分之十一。比较前把 9.8 写成 9.80,十分位仍是 8,百分位是 0。这时百分位不用再比,因为十分位已经 1 小于 8。第一段把 11 和 8 拿出来比,等于把百分位和十分位当成了同一个数位。
差值也要按对齐之后的数来减。9.800 减 9.110 得 0.690。第一段写的 0.31,是 11 与 8 的整数差再点上小数点,不是减法的结果。只把大于改成小于、留下 0.31,读者仍会以为两边相差三分之一左右。第二段没有重写差值。引用时要自己算出 0.69,不要沿用第一段的数字。
程序里用数值比较这一对,9.8 减 9.11 为正。若怕二进制小数,把两者乘以 100 变成 980 和 911,再比整数。乘数必须盖住最长的小数位。9.11 有两位,乘 10 会把末位弄丢。字符串的字典序在这一对上碰巧同向,是因为第一位小数 1 的字符小于 8。换成 9.2 和 9.11,字典序和数值可能不再同向。不要用这一对的碰巧来证明字符串比较可用。
对齐到三位小数之后,九点一一零小于九点八零零,因为十分位上的一小于八,后面的位数不能把这个结果翻过来。 第一段把十一和八当成整数来比,所以得出了相反的方向。那两个整数的差也不是这两个小数的差。 零点三一是十一减八再写成小数的样子。对齐之后应用八百减一百一十,得到六百九十,也就是零点六九。 九点八只写了一位小数,这一位在十分位,表示十分之八。百分点上的十一合起来只是百分之十一。 把九点八补成九点八零,是为了和九点一一的位数对齐。补上的零不增加数值。 整数部分都是九。整数相等时只比较小数。零点八大于零点一一,所以整体是九点八更大。 第二段把两个数拆成整数加小数,方向改对了。对外说明以第二段为准,并把差值改成零点六九。 只把大于改成小于、却留下零点三一,读者仍会记错两者相距多远。符号和差值要一起改。 程序里用数值相减。差为正,说明被减数更大。九点八减九点一一,结果是正的零点六九。 若改用整数比较,先乘一百,得到九百八十和九百一十一。九百八十更大。只乘十会把末位丢掉。 不要用字符串的长短或字典序代替数值。这一对碰巧同向,是因为字符一小于字符八。 不要改去比较九十一和九十八。那是去掉小数点之后的另一对整数。 显示时先用同一位小数格式化再比。格式化用补零,不用截掉末位。 单元测试断言九点八大于九点一一。断言消息里不要引用十一大于八。 排序和过滤同样先转成数值。金额和测量值都不按字符顺序排。 用户只说了再想想,第二段就改了方向。补零的展示可以留下,结论和零点三一要换掉。 口头复述先说十分位。十分位已经分出胜负,后面的位数只是对齐用的。 这一对可以记成九点八更大,差是零点六九。第一段的相反结论不要再被引用。 验收时只保留第二段的方向,并用数值或乘以一百的整数来比,不按字符顺序。 课堂上先让人写出错误的大于号,再补零改过来。改的时候符号和差值一起换,不能只换一个。 百分之十一小于十分之八。把八看成比十一小的整数,是把不同数位放在了同一档上。 零点六九要写进更正后的说明。若说明里还看得到零点三一,就还没有改完。 这一对数字的关系只用来说明数位,不要推广成任意字符串都能当数字比大小。 补零只给人看齐位数,计算时仍用原来的两个小数,不要把尾随零写进存储。 更正后的文本里若还能搜到零点三一,说明旧差值还在,要和错误的大于号一起删掉。 乘一百是为了盖住两位小数。九百八十和九百一十一的大小,应和小数相减的符号一致。



