单位换算完全指南:公式、代码与工具
快递单上写 22 lbs,系统要求填千克。菜谱标注 350°F,你手边只有摄氏度的烤箱。单位换算这件事,搞对了没人注意,搞错了代价可以很大——NASA 就曾因为英制和公制混用,报废了一台 3.27 亿美元的火星探测器。
这篇文章把长度、重量、温度、体积四类换算讲清楚:精确公式、可直接复制的 JavaScript/Python 代码、心算技巧,以及速查表。
单位搞混能有多严重
你可能觉得这种错误不会发生在专业团队身上。看两个真实案例。
1999 年,NASA 的火星气候探测者号直接在火星大气层里烧掉了。事后调查发现,一个团队输出的推力数据用磅力·秒,另一个团队按牛顿·秒读入,算了好几个月谁都没发觉。3.276 亿美元没了。
1983 年,加拿大航空 143 号班机在万米高空燃油耗尽。地勤把油量按磅算,飞机系统按千克算,结果实际加的油不到计划的一半。飞行员只能滑翔迫降(后来被叫做”吉姆利滑翔机”)。
极端案例之外,小错误更常见:
- 美制加仑和英制加仑差了 20%。 不搞清楚用的是哪种,油耗对比就是在比两个不同的东西。
- 金衡盎司比普通盎司重 10%。 金价说的”每盎司”是 31.1 g 的金衡盎司,不是厨房秤上 28.35 g 的常衡盎司。搞反了,金融计算直接偏一成。
- 温度换算带偏移量。 不能光乘除,还得加减,漏了就差得离谱。
公制和英制到底差在哪
先拉个对比表。
| 维度 | 公制 (SI) | 英制 / 美制 |
|---|---|---|
| 设计原则 | 十进制——每级单位以 10 的幂缩放 | 不一致——12 英寸/英尺、3 英尺/码、5,280 英尺/英里 |
| 长度 | 米 (m) | 英尺 (ft)、英寸 (in)、英里 (mi) |
| 质量/重量 | 千克 (kg) | 磅 (lb)、盎司 (oz) |
| 温度 | 摄氏度 (°C)、开尔文 (K) | 华氏度 (°F) |
| 体积 | 升 (L) | 加仑 (gal)、品脱 (pt)、杯 (cup) |
| 使用国家 | 全球约 95% 的国家 | 美国、缅甸、利比里亚 |
公制由国际度量衡局(BIPM)维护,2019 年起全部七个基本单位都锚定在物理常数上(光速、普朗克常数等)。换句话说,“一米”的定义放到宇宙任何角落都不变。
英制内部还分裂:美国用的叫 US customary,英国历史上用的叫 Imperial。很多单位名字一样,定义不同——加仑和液量盎司是最容易踩的坑。
长度换算:公式与代码
长度是最常换算的类型。嫌手动算麻烦可以直接用长度换算工具,要在代码里做就用下面的公式。
核心换算系数
以下都是精确值,来自 1959 年国际码磅协议:
| 换算方向 | 系数 | 精确性 |
|---|---|---|
| 英寸 → 厘米 | × 2.54 | 精确 |
| 英尺 → 米 | × 0.3048 | 精确 |
| 码 → 米 | × 0.9144 | 精确 |
| 英里 → 千米 | × 1.609344 | 精确 |
| 海里 → 米 | × 1,852 | 精确 |
公制前缀让换算更简单:1 km = 1,000 m,1 cm = 0.01 m,1 mm = 0.001 m。公制单位之间的换算就是移动小数点。
代码实现
JavaScript:
const lengthConvert = {
inToCm: (inches) => inches * 2.54,
cmToIn: (cm) => cm / 2.54,
ftToM: (feet) => feet * 0.3048,
mToFt: (m) => m / 0.3048,
miToKm: (miles) => miles * 1.609344,
kmToMi: (km) => km / 1.609344,
};
console.log(lengthConvert.inToCm(27)); // 68.58(27 寸显示器)
console.log(lengthConvert.miToKm(26.2)); // 42.164928(马拉松)
console.log(lengthConvert.mToFt(1.83)); // 6.003937...(约 6 英尺)
Python:
def inches_to_cm(inches: float) -> float:
return inches * 2.54
def feet_to_meters(feet: float) -> float:
return feet * 0.3048
def miles_to_km(miles: float) -> float:
return miles * 1.609344
print(inches_to_cm(27)) # 68.58
print(miles_to_km(26.2)) # 42.164928
心算技巧
- 英寸转厘米: 乘 2.5,误差仅 1.6%,日常够用。
- 英里转千米: 用斐波那契数列。相邻的斐波那契数近似英里与千米的换算:5 英里 ≈ 8 千米,8 英里 ≈ 13 千米,13 英里 ≈ 21 千米。
- 英尺转米: 除以 3.3。6 英尺约 1.82 米。
速查表:长度
| 英制 | 公制 |
|---|---|
| 1 英寸 | 2.54 厘米 |
| 1 英尺 | 30.48 厘米 |
| 6 英尺 | 1.8288 米 |
| 1 码 | 0.9144 米 |
| 1 英里 | 1.609 千米 |
| 1 海里 | 1.852 千米 |
重量换算:公式与代码
物理课上”重量”和”质量”是两回事,日常用不着区分。用重量换算工具在线算更快。
核心换算系数
| 换算方向 | 系数 |
|---|---|
| 千克 → 磅 | × 2.20462 |
| 磅 → 千克 | × 0.453592 |
| 盎司(常衡) → 克 | × 28.3495 |
| 金衡盎司 → 克 | × 31.1035 |
| 英石 → 千克 | × 6.35029 |
| 英石 → 磅 | × 14(精确) |
金衡盎司的坑
做贵金属或金融相关开发的人注意了:金衡盎司(31.1035 g)比常衡盎司(28.3495 g)重 10%。金、银、铂报价全用金衡盎司。在代码里用错了,金额直接差一成。
代码实现
JavaScript:
const weightConvert = {
kgToLbs: (kg) => kg * 2.20462,
lbsToKg: (lbs) => lbs * 0.453592,
ozToGrams: (oz) => oz * 28.3495,
gramsToOz: (g) => g / 28.3495,
stoneToKg: (st) => st * 6.35029,
};
console.log(weightConvert.kgToLbs(70)); // 154.3234
console.log(weightConvert.ozToGrams(8)); // 226.796
console.log(weightConvert.stoneToKg(11)); // 69.85319
Python:
def kg_to_lbs(kg: float) -> float:
return kg * 2.20462
def lbs_to_kg(lbs: float) -> float:
return lbs * 0.453592
print(kg_to_lbs(70)) # 154.3234
print(lbs_to_kg(154)) # 69.853...
心算技巧
千克转磅: 先乘 2,再加 10%。比如 70 kg → 140 + 14 = 154 磅(精确值 154.32,够用)。
中国用户还常遇到市制换算:1 斤 = 500 g = 0.5 kg,1 两 = 50 g。1 磅 ≈ 0.907 斤。
速查表:重量
| 英制 | 公制 |
|---|---|
| 1 盎司 | 28.35 克 |
| 1 磅 | 453.6 克 |
| 1 英石(14 磅) | 6.35 千克 |
| 1 短吨(2,000 磅) | 907.2 千克 |
| 1 金衡盎司 | 31.10 克 |
温度换算:不能光乘除,还得加减
前面三类换算都是乘个系数就完事。温度不行,因为摄氏、华氏、开尔文的零点各不相同,换算公式里有偏移量。可以用温度换算工具验证下面的公式。
四种温度标尺的换算公式
摄氏 ↔ 华氏:
°F = °C × 9/5 + 32
°C = (°F − 32) × 5/9
9/5 这个数哪来的?水 0°C 结冰(32°F),100°C 沸腾(212°F)。华氏从冰点到沸点跨了 180 度,摄氏跨 100 度,180 ÷ 100 = 9/5。
摄氏 ↔ 开尔文:
K = °C + 273.15
°C = K − 273.15
开尔文每度的大小跟摄氏一样,只是把零点挪到了绝对零度(−273.15°C)。所以开尔文没有负数。
华氏 ↔ 兰氏度:
°R = °F + 459.67
兰氏度跟华氏度的关系,就跟开尔文跟摄氏度的关系一样——度的大小不变,零点挪到绝对零度。基本只在美国工程热力学里见到。
冷知识: −40° 是摄氏和华氏的交叉点。−40°C = −40°F,数值完全相同。
代码实现
JavaScript:
const tempConvert = {
cToF: (c) => c * 9 / 5 + 32,
fToC: (f) => (f - 32) * 5 / 9,
cToK: (c) => c + 273.15,
kToC: (k) => k - 273.15,
fToK: (f) => (f - 32) * 5 / 9 + 273.15,
kToF: (k) => (k - 273.15) * 9 / 5 + 32,
};
console.log(tempConvert.cToF(100)); // 212(水沸点)
console.log(tempConvert.fToC(98.6)); // 37(体温)
console.log(tempConvert.cToK(0)); // 273.15(冰点)
Python:
def c_to_f(c: float) -> float:
return c * 9 / 5 + 32
def f_to_c(f: float) -> float:
return (f - 32) * 5 / 9
def c_to_k(c: float) -> float:
return c + 273.15
print(c_to_f(100)) # 212.0
print(f_to_c(98.6)) # 37.0
print(c_to_k(-273.15)) # 0.0(绝对零度)
心算技巧
粗算摄氏转华氏:乘 2 加 30。 在 0–30°C 范围内很好用:
- 20°C → 40 + 30 = 70°F(精确值 68°F)
- 30°C → 60 + 30 = 90°F(精确值 86°F)
温度越高误差越大,但看天气预报或调烤箱温度够用了。
关键温度对照
| 事件 | °C | °F | K |
|---|---|---|---|
| 绝对零度 | −273.15 | −459.67 | 0 |
| 水的冰点 | 0 | 32 | 273.15 |
| 室温 | 20–22 | 68–72 | 293–295 |
| 人体温度 | 37 | 98.6 | 310.15 |
| 水的沸点 | 100 | 212 | 373.15 |
| 烤箱中火 | 180 | 356 | 453.15 |
体积换算:公式与代码
体积换算最大的坑:美制加仑和英制加仑不是一回事。用体积换算工具可以在 15 种单位间直接转。
核心换算系数
| 换算方向 | 系数 |
|---|---|
| 升 → 美制加仑 | ÷ 3.78541 |
| 升 → 英制加仑 | ÷ 4.54609 |
| 美制杯 → 毫升 | × 236.588 |
| 美制液量盎司 → 毫升 | × 29.5735 |
| 美制汤匙 → 毫升 | × 14.787 |
| 美制茶匙 → 毫升 | × 4.929 |
美制加仑 vs 英制加仑
踩这个坑的人比你想的多:
| 单位 | 美制 | 英制 | 差异 |
|---|---|---|---|
| 1 加仑 | 3.785 升 | 4.546 升 | 20.1% |
| 1 液量盎司 | 29.57 毫升 | 28.41 毫升 | 3.9% |
| 1 品脱 | 473.2 毫升 | 568.3 毫升 | 20.1% |
美制加仑沿用 1707 年的英格兰葡萄酒加仑定义,英制加仑在 1824 年重新定义为 10 磅水(62°F)的体积。结果英制加仑比美制大了差不多五分之一。
实际踩坑场景:英国汽车评测里的 mpg 用的是英制加仑。你要是不转换就直接拿来跟美制 mpg 比,英国车会”凭空”省油 20%。
代码实现
JavaScript:
const volumeConvert = {
litersToUSGal: (l) => l / 3.78541,
usGalToLiters: (gal) => gal * 3.78541,
cupsToMl: (cups) => cups * 236.588,
mlToCups: (ml) => ml / 236.588,
flOzToMl: (floz) => floz * 29.5735,
mlToFlOz: (ml) => ml / 29.5735,
};
console.log(volumeConvert.litersToUSGal(3.78541)); // 1(精确)
console.log(volumeConvert.cupsToMl(2)); // 473.176
console.log(volumeConvert.flOzToMl(12)); // 354.882
Python:
def liters_to_us_gal(liters: float) -> float:
return liters / 3.78541
def cups_to_ml(cups: float) -> float:
return cups * 236.588
print(liters_to_us_gal(3.78541)) # ~1.0
print(cups_to_ml(2)) # 473.176
用 JavaScript 构建通用单位换算器
项目里需要换算功能?下面是一个精简实现。思路很简单:每个单位只记录它和基准单位的换算系数,转换时先转到基准单位再转到目标单位。
const units = {
// 长度(基准:米)
m: { base: 'm', factor: 1 },
km: { base: 'm', factor: 1000 },
cm: { base: 'm', factor: 0.01 },
mm: { base: 'm', factor: 0.001 },
in: { base: 'm', factor: 0.0254 },
ft: { base: 'm', factor: 0.3048 },
yd: { base: 'm', factor: 0.9144 },
mi: { base: 'm', factor: 1609.344 },
// 重量(基准:克)
g: { base: 'g', factor: 1 },
kg: { base: 'g', factor: 1000 },
mg: { base: 'g', factor: 0.001 },
lb: { base: 'g', factor: 453.592 },
oz: { base: 'g', factor: 28.3495 },
// 体积(基准:毫升)
ml: { base: 'ml', factor: 1 },
l: { base: 'ml', factor: 1000 },
usgal: { base: 'ml', factor: 3785.41 },
uscup: { base: 'ml', factor: 236.588 },
floz: { base: 'ml', factor: 29.5735 },
};
function convert(value, fromUnit, toUnit) {
const from = units[fromUnit];
const to = units[toUnit];
if (!from || !to || from.base !== to.base) {
throw new Error(`无法将 ${fromUnit} 转换为 ${toUnit}`);
}
return value * from.factor / to.factor;
}
// 温度需要特殊处理(有偏移量)
function convertTemp(value, from, to) {
let c;
if (from === 'C') c = value;
else if (from === 'F') c = (value - 32) * 5 / 9;
else if (from === 'K') c = value - 273.15;
else throw new Error(`未知单位: ${from}`);
if (to === 'C') return c;
if (to === 'F') return c * 9 / 5 + 32;
if (to === 'K') return c + 273.15;
throw new Error(`未知单位: ${to}`);
}
console.log(convert(26.2, 'mi', 'km')); // 42.164928
console.log(convert(70, 'kg', 'lb')); // 154.324...
console.log(convert(2, 'uscup', 'ml')); // 473.176
console.log(convertTemp(100, 'C', 'F')); // 212
convert 处理所有跟基准单位成比例的换算。温度因为有偏移量,得单独写。要加新单位,往 units 里填一行就行。
常见问题
1 英寸等于多少厘米?
2.54 厘米。注意这是精确值,不是四舍五入的近似——1959 年国际码磅协议定死的。英寸转厘米乘 2.54,反过来除 2.54。懒得算可以用长度换算工具。
摄氏度转华氏度的公式是什么?
°F = °C × 9/5 + 32。比如 20°C = 20 × 1.8 + 32 = 68°F。9/5 怎么来的上面解释过了:华氏冰点到沸点跨 180 度,摄氏跨 100 度,180 ÷ 100 = 9/5。拿温度换算工具验一下。
美制加仑和英制加仑为什么不一样?
美制加仑(3.785 升)来自 1707 年英格兰的葡萄酒加仑,英制加仑(4.546 升)1824 年改成了 10 磅蒸馏水的体积。差了 20%,比油耗、换食谱、算国际运费时都会踩坑。
1 千克等于多少磅?
1 kg = 2.20462 lbs。心算法:先乘 2 再加 10%。70 kg → 140 + 14 = 154 磅(精确值 154.32)。
什么是绝对零度?
0 K = −273.15°C = −459.67°F。分子热运动在这个温度理论上完全停止。到目前为止没有实验室真正达到过 0 K,最接近的记录离它还有十亿分之一度。
金衡盎司和普通盎司一样吗?
不一样。金衡盎司 31.1035 g,常衡盎司 28.3495 g,差了 10%。金银铂报价一律用金衡盎司。只要看到金价写”每盎司”,那就是金衡盎司。
怎样快速心算英里转千米?
靠斐波那契数列。相邻两个斐波那契数天然接近英里和千米的 1:1.609 比例:5 英里 ≈ 8 千米,8 英里 ≈ 13 千米,13 英里 ≈ 21 千米。不在数列里的数就乘 1.6。
记住这四点就够了
- 公制靠小数点。 公制单位之间的换算就是移小数点,不用背。
- 英制靠记忆。 12 英寸 = 1 英尺,3 英尺 = 1 码,5,280 英尺 = 1 英里——没规律,只能记。
- 温度得加减。 别光乘除,公式是 °F = °C × 9/5 + 32,偏移量不能省。
- 美制加仑和英制加仑差 20%。 用之前确认是哪种,不然算出来的全是错的。
要换算直接用工具,不用注册,数据也不会离开你的浏览器: