猫工具站
帮助中心 猫Blog 关于我们 广告合作 EN

单位换算与进制转换:因子、显示取整,和范围的两端

计算更新于 2026-09-29

两台页面都叫「转换器」,但这个词把要紧的差别盖住了。单位换算页做的是浮点乘除:一张表里存着每个单位相对基准的大小,其中一部分是国际定义值,一部分是平均值,而它的输出是为阅读排版过的,不是为继续算准备的。进制转换页做的是另一件事——把同一个整数换个进制重新写一遍,全程用大整数,所以它的范围内不可能出错,唯一值得问的问题是范围到哪为止。

这个区别决定了你要防的东西不一样。单位换算要防的是约定和显示:哪一种加仑、哪一种吨、六位小数之外还剩多少。进制转换只需要记住 2⁵³−1 这条线,而且它是硬拒绝,不是四舍五入。

下面每一条都是从两台页面自己的脚本里读出来、再在页面上实际跑一遍确认过的。写出来的数字,就是页面实际显示的数字。

两台页面各自存了什么

单位换算页里有八类、共 77 个单位。每个单位就是一个数:它在所属类别里的基准单位下的倍数。

类别 单位数 基准单位
长度 16 米
重量 11 千克
温度 3 —(见下)
面积 11 平方米
体积 12 升
速度 6 米/秒
时间 9 秒
数据存储 9 字节

换算就是「数值 × 来源因子 ÷ 目标因子」一步算完,不经过任何中间实物单位,所以链条上不会累积误差——你用的那一个因子是多少,结果就是多少。

进制转换页没有表。它把你打的字解析成任意精度的整数,查一次上限,然后用另外三种进制重新写出来。

哪些因子是定义值,哪些是平均值

属于定义、可以当准数用的:

  • 长度:1 英寸 = 0.0254 米、1 英尺 = 0.3048 米、1 码 = 0.9144 米、1 英里 = 1609.344 米
  • 重量:1 磅 = 0.45359237 千克、1 盎司 = 0.0283495231 千克
  • 速度与海里:1 海里 = 1852 米、1 节 = 0.5144444 米/秒、1 英里/时 = 0.44704 米/秒
  • 市制单位按法定米制换算:1 里 = 500 米、1 丈 = 10/3 米、1 尺 = 1/3 米、1 寸 = 1/30 米、1 斤 = 0.5 千克、1 亩 ≈ 666.6667 平方米

属于约定或平均值的,也是不同工具给出不同数字的地方:

  • 加仑、夸脱、品脱、液体盎司、杯、汤匙、茶匙都是美制液量单位。 1 加仑 = 3.785412 升、1 汤匙 = 0.0147868 升、1 茶匙 = 0.00492892 升。英制加仑(4.54609 升)不在表里。
  • 「吨」是公吨(1000 千克)。美制短吨(907.18 千克)和英制长吨(1016.05 千克)都没有。
  • 马赫取 343 米/秒。 这个值通常对应海平面、约 20 ℃ 的干空气;15 ℃ 时约为 340 米/秒,高空低温下还要低。所以马赫的读数只在这条假设下成立,航空场合请按当时的大气条件算。
  • 「年」是 31536000 秒,也就是整 365 天;「月」是 30 天。 算费率够用,算日期会错:12 个月在这个页面里是 360 天,换算成「年」显示 0.986301;366 天显示 1.00274 年。

显示的窗口,和一条页面上没写的规则

结果框是只读的,里面的数按数量级分档:

数值 显示方式
0.001 到 100 万之间 最多六位小数,去掉尾随零
大于等于 100 万,或小于 0.001 科学计数法,保留四位小数
绝对值小于 1e-10 显示 0
非有限值 显示 —

这张表里藏着两个细节。第一,上界是开区间,所以正好 100 万不会走普通数字:1 平方千米显示成 1.0000e+6 平方米、1 立方米显示成 1.0000e+6 毫升、1 千米显示成 1.0000e+6 毫米。第二,还有一条不在页面说明里的规则:即使落在窗口内,只要六位小数写出来超过 12 个字符,也会被换成科学计数法。「1 米 = 39.370079 英寸」是八个字符,保留;但下面这些都在窗口内,却都变成了科学计数法:

换算 精确结果 显示
7 千米 → 英寸 275590.55118110… 2.7559e+5
1 尺 → 微米 333333.33333333… 3.3333e+5
123456 英里 → 千米 198683.172864 1.9868e+5
1 磅 → 吨 0.00045359237 4.5359e-4

想要普通数字,就换一个让结果落回中间地带的目标单位。

取整只发生在显示层

因子在内部是全精度的,被四舍五入的只有你读到的那串字。1 磅按 0.45359237 换算,显示成 0.453592——六位小数;下面那行公式里的因子也是同一个被显示规则截过的数字,所以你复制得到的位数和你实际能用的位数是一致的。

由此有两件事值得记住。一是一次算完比手工分两步准,因为第二步是从一个已经掉过位数的数字出发的;二是本文里写的定义值就是页面用的定义值,需要六位以上有效数字时请直接用定义值算,别接着用屏幕上的结果。

数据存储:一路 1024,只有一行不合群

这一类全部按 1024 的幂计算,也就是操作系统统计容量时的口径:1 KB = 1024 B、1 TB = 1024 GB、1 字节 = 8 比特。那些看起来别扭的读数都来自显示窗口,不是因子:

  • 1 吉字节 → 太字节 显示 9.7656e-4(低于 0.001,进科学计数法)
  • 1000 吉字节 → 太字节 显示 0.976563
  • 1 太字节 → 字节 显示 1.0995e+12

但有一行是真的不一样。拍字节的因子存的是 1.1258999e15,而 2⁵⁰ 是 1125899906842624,两者差 6842624 字节,约 0.0006%。所以 1 拍字节换出来是 1023.999994 太字节,不是 1024。从字节到太字节这一段在 1024 口径里是自洽的;拍字节是个圆整过的近似值,如果你的计算要求严格的二进制倍数,第六位就会对不上。

温度是唯一没有因子的一类

摄氏、华氏、开尔文的零点不重合,一个乘数描述不了它们的关系。页面把每一种换算都先归到摄氏——华氏用 (℉ − 32) × 5/9,开尔文用 ℃ + 273.15——结果框下面那行显示的也是公式,而不是因子。

输入 结果
37 摄氏度 98.6 华氏度、310.15 开尔文
0 华氏度 255.372222 开尔文
0 开尔文 −273.15 摄氏度、−459.67 华氏度
37 开尔文 −236.15 摄氏度、−393.07 华氏度

来源和目标选同一个单位时,数值原样通过,公式行写「相同单位,值不变」,不会硬套一遍公式。

结果下面那行字在说什么

那行是因子读数,不是你这次计算的复述:它永远描述「1 个单位」。12 个月换算成天,结果框是 360,公式行写的是「1 月 = 30 天」。它还是按标签第一个左括号切出来的,所以「里 (市里)」显示成「里」,「英寸 (in)」显示成「英寸」。

因为它走同一套显示规则,这行字自己也会变成科学计数法:「1 寸 = 3.3333e-5 千米」「1 斤 = 5.0000e-4 吨」——数值没错,但看起来比实际精度低。

交换按钮与切类别:哪些东西会被保留

  • 交换只把两个下拉框的值对调,输入的数字不动。2 千米 → 厘米 显示 200000;交换后同样那个 2 变成「2 厘米 → 千米」,显示 2.0000e-5;再交换回来又是 200000。不会漂移,因为每次计算都是从你的数字和因子重新乘除,不是拿屏幕上的比值继续算。
  • 切类别会把两个下拉框重置成新类别的前两个单位,但保留你输入的数字。刚才那个代表「2 千米」的 2,切到温度就变成 2 摄氏度,显示 35.6 华氏度。每次切类别之后要重新确认单位,不能只看数字。
  • 输入处理:输入框空着或填了非数字,按 0 处理,不报错;负数照算(−1 千米 → -1000);填 1e400 这类溢出字面量,结果显示 —。结果框不可编辑。

进制转换:范围内不可能出错,唯一的问题是范围在哪

解析和输出都走任意精度整数,数字全程不经过浮点数。也就是说这台页面在范围内不会失准,它只有可能拒绝你。

天花板是 9,007,199,254,740,991,也就是 2⁵³−1——双精度浮点数能连续精确表示的最后一个整数。这个上限在四种进制里的样子:

进制 值
BIN 1111111111111111…(共 53 个 1)
OCT 377777777777777777
DEC 9,007,199,254,740,991
HEX 1FFFFFFFFFFFFF

所以二进制最多 53 位,而 2⁵³(9007199254740992)会被直接拒收,不会四舍五入。判断是在精确整数上做的,所以你粘 200 位数字进去也是先完整解析、再整条驳回,不存在悄悄截断。

你正在打字的那个框保留原文

你编辑的那个框原样保留你的输入,另外三个框被改写成规范形式。两个后果:

  • 前导零留在他打的那个框里。 在二进制框里打 00001010,该框仍是 00001010,另外三框显示 10(十进制)、12(八进制)、A(十六进制)。在十进制框里打 007,框里仍是 007,下方读数写 7。被去掉前导零的是页面替你填的那三个框,不是你在用的那个。
  • 十六进制的大小写在输入时也保留。 在十六进制框里打 abc,框里就是 abc;由其它框推导出来的十六进制值则一律大写(FF、1FFFFFFFFFFFFF)。

三种失败,三种反应

你的操作 页面的反应
打了非法字符(0x1A、-1、1.5、1 255) 该框标红,另外三框保留上一次的有效结果,下方读数也保留
数值超过 2⁵³−1 该框标红,另外三框被清空,下方读数换成红色的超出范围提示
把当前框清空 四个框一起清空,读数回到起始提示

这两类失败的区别是有意的:打到一半敲错一个字符,不该把你正要复制的结果一起毁掉;而超出范围的数旁边不能留着一个旧答案。

有一处毛刺:超范围一次之后,那个已经被标红的空框会在你转到别的框操作期间一直红着。你在它里面再输入一次、或者按「清空全部」,红色才会消掉。

按键、复制按钮与读数

  • 在输入框里按 Esc 会清掉当前这一格,并连带重置另外三格。
  • 清空全部按钮做同样的事,并且会把红色标记一并清掉。
  • 每个框右侧各有独立的复制按钮,提示文字(已复制)约 1.2 秒后自动消失。
  • 下方十进制读数用英文逗号分组,两种语言版本都一样(2,748、9,007,199,254,740,991),因为分组方式写死在代码里,不跟随系统语言。
  • 空格:首尾空格会被去掉并按合法输入处理(255 当作 255);数字中间的空格不合法,1 255 会被标红。

什么时候用哪一台

  • 单位换算适合厨房、旅行、屏幕与纸张尺寸、土地面积、速率,以及任何以数据手册单位给出的量;数字要紧时,直接读本文的因子表。
  • 不要拿它的「年」「月」做日期计算:365 天和 30 天都是平均值。真实日历请用日期计算器,闰日它也算。
  • 进制转换适合位掩码、颜色码、文件头和内存地址。记住它按设计就是无符号整数:负数和(补码)小数都不在范围内。
  • 需要六位以上有效数字时,请取本文给出的定义值一次算完,不要拿屏幕上的圆整结果继续往下算。

常见问题

为什么 1 平方千米显示成 1.0000e+6 平方米,而不是 1000000? 普通数字的窗口上界是开区间,正好 100 万已经属于科学计数法那一档,所以显示比直觉早四位切换。数值是对的,变的只是写法。

这个换算器一共多少个单位? 八类共 77 个:长度 16、重量 11、温度 3、面积 11、体积 12、速度 6、时间 9、数据存储 9。中英两版的数字完全相同,差别只在标签文字。

是哪一种加仑、哪一种吨、哪一种杯? 美制液量加仑(3.785412 升)、公吨(1000 千克)、美制杯(0.236588 升)、美制汤匙和茶匙。英制加仑、短吨、长吨、英制杯都没有。

这里 1 拍字节等于 1024 太字节吗? 不等——这是唯一一处跳出规律的读数:拍字节因子存的是圆整过的 1.1258999e15,而不是精确的 2⁵⁰,所以 1 拍字节显示 1023.999994 太字节。从字节到太字节这一段,1024 口径是精确成立的。

公式行为什么会变成 4.5359e-4? 那行和结果走同一套格式化规则。0.00045359237 小于 0.001,所以被显示成四位小数的科学计数法。

能把毫升换成克吗? 作为单位换算不行:那要跨类别,还要知道密度。水约 1 克/毫升,油、蜂蜜、面粉都不是,所以页面把体积和质量分开。

为什么上限是 9,007,199,254,740,991? 因为它是 2⁵³−1,双精度浮点数能精确表示的最后一个整数。再往上,相邻的整数可能共用同一个浮点值,页面选择拒收,而不是给你一个可能错的结果。

我在十六进制框里打了小写 abc,它为什么一直是小写? 你正在打字的框不会被页面改写——正因如此你才能连续编辑而文字不跳。页面替你算出来的十六进制值是大写的,你自己敲的保持原样。

进制转换能处理负数或小数吗? 不能。输入被当作该框进制下的一串数码,负号和小数点都会被判为非法字符并标红。需要带符号表示就先转绝对值、自己补符号;小数可以先放大成整数再转。

本指南用到的工具

广告