Skip to content
返回博客
教程

单位换算完全指南:长度、重量、温度、体积公式与代码实战

公制与英制单位换算详解:长度、重量、温度、体积的精确公式、JavaScript/Python 代码示例与速查表,附免费在线工具。

14 分钟

单位换算完全指南:公式、代码与工具

快递单上写 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°FK
绝对零度−273.15−459.670
水的冰点032273.15
室温20–2268–72293–295
人体温度3798.6310.15
水的沸点100212373.15
烤箱中火180356453.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。

记住这四点就够了

  1. 公制靠小数点。 公制单位之间的换算就是移小数点,不用背。
  2. 英制靠记忆。 12 英寸 = 1 英尺,3 英尺 = 1 码,5,280 英尺 = 1 英里——没规律,只能记。
  3. 温度得加减。 别光乘除,公式是 °F = °C × 9/5 + 32,偏移量不能省。
  4. 美制加仑和英制加仑差 20%。 用之前确认是哪种,不然算出来的全是错的。

要换算直接用工具,不用注册,数据也不会离开你的浏览器: