BMI 计算器
身高体重→BMI/健康区间/中外标准
BMI 分级标准(中国 vs WHO 国际)
| 类别 | 中国(CHN) | WHO 国际 | 说明 |
|---|---|---|---|
| 偏瘦 | < 18.5 | < 18.5 | 免疫力下降,骨质疏松风险 |
| 正常 | 18.5 – 23.9 | 18.5 – 24.9 | 健康状态 |
| 超重 | 24.0 – 27.9 | 25.0 – 29.9 | 高血压风险↑,建议运动 |
| 肥胖 | ≥ 28.0 | ≥ 30.0 | 糖尿病/心血管疾病风险显著↑ |
计算说明
BMI(Body Mass Index)
· BMI = 体重(kg) ÷ 身高(m)² 例:65 / 1.7² = 22.5
· 中国成人标准(卫健委):18.5 / 24 / 28 三档;WHO 国际:18.5 / 25 / 30 三档
BMR 基础代谢(Mifflin-St Jeor,1990 公认最准)
· 男:10×kg + 6.25×cm − 5×age + 5
· 女:10×kg + 6.25×cm − 5×age − 161
TDEE 每日总热量需求 = BMR × 活动系数
· 1.2 久坐|1.375 轻度(每周 1-3 次运动)|1.55 中度|1.725 高度|1.9 极高
WHR 腰臀比(内脏脂肪指标)
· 男 > 0.90 / 女 > 0.85 为腹型肥胖,比 BMI 更能预测心血管风险
BMI 不适用于:孕妇 / 哺乳期 / 运动员(肌肉发达者 BMI 可能虚高)/ 儿童(用儿童 BMI 百分位)/ 老人(需结合肌少症评估)。健康决策请咨询专业医师。
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
健身效果追踪
健身爱好者每周记录体重和身高数据,计算 BMI 变化趋势。本工具同步显示中国和 WHO 两套标准区间,帮助判断减脂增肌是否在健康范围内——避免只看体重数字忽略体脂变化,也防止过度减重进入偏瘦区间。配合体脂秤数据,更准确评估训练效果。
体检报告自查
拿到体检报告后,对 BMI 指标有疑问的普通人。输入身高体重后,工具同时展示中国标准(24-27.9 超重)和 WHO 标准(25-29.9 超重),并标注当前值落在哪个风险等级。方便对比不同标准下的健康建议,决定是否需要进一步咨询医生。
孕期体重管理
孕妇在产检间隔期需要监控体重增长是否在推荐范围内。输入孕前身高体重和当前体重,工具计算 BMI 并对照孕期体重增长指南(低体重 / 正常 / 超重孕妇的推荐增重区间),帮助判断当前增重速度是否合理,避免过快或过慢影响母婴健康。
家庭健康筛查
家长想快速了解全家人的体重状况是否在健康范围。依次输入每位家庭成员的身高体重,工具输出各自的 BMI 值和对应健康区间,并标注中外标准差异。一次操作覆盖全家,方便发现潜在的超重或偏瘦成员,及时调整饮食或运动计划。
入职体检自测
求职者在正式体检前想预判自己的 BMI 是否达标。输入身高体重后,工具显示 BMI 数值及常见企业体检标准(通常要求 18.5-24),并给出建议:如果接近边界值,提前调整饮食或增加运动,避免因 BMI 不合格影响入职流程。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 (bmi.tl654.com) | 竞品 A (calculator.net BMI) | 传统方法 (体检/医院) |
|---|---|---|---|
| 数据隐私 | 纯浏览器计算,身高体重数据不上传服务器,本地完成 | 数据通过表单提交至服务器计算 | 需告知工作人员身高体重,数据录入内部系统 |
| 处理速度 | 输入后即时显示结果,无网络延迟 | 需等待页面加载和服务器响应,通常 1-3 秒 | 需排队、测量、等待报告,通常数小时至数天 |
| 离线可用 | 完全离线可用,页面加载后断网也能计算 | 必须联网,无法离线使用 | 必须前往线下机构,完全依赖现场 |
| 标准覆盖 | 同时展示中国标准 (WS/T 428-2013) 和 WHO 标准 | 主要展示 WHO 标准,部分页面提供其他标准选项 | 通常只采用国内通用标准,标准更新滞后 |
| 结果解读 | 直接给出健康区间分类和标准来源,结果直观 | 给出 BMI 值和简单分类,部分页面有详细说明 | 需医生或体检报告解读,信息获取不即时 |
| 使用门槛 | 无需注册、无需安装、打开即用 | 无需注册,但需要网络环境和浏览器 | 需挂号、排队、付费,流程复杂耗时 |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例8 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| 身高: 170 cm, 体重: 65 kg | BMI: 22.5 | 健康区间: 正常体重 | 中国标准: 正常 (18.5-23.9) | 国际标准: 正常 (18.5-24.9) | 典型常规场景:成年男性标准体型 |
| 身高: 160 cm, 体重: 50 kg | BMI: 19.5 | 健康区间: 正常体重 | 中国标准: 正常 (18.5-23.9) | 国际标准: 正常 (18.5-24.9) | 典型常规场景:成年女性标准体型 |
| 身高: 180 cm, 体重: 45 kg | BMI: 13.9 | 健康区间: 体重过轻 | 中国标准: 过轻 (<18.5) | 国际标准: 过轻 (<18.5) | 边界 case:极端过轻值,接近厌食症风险线 |
| 身高: 150 cm, 体重: 100 kg | BMI: 44.4 | 健康区间: 重度肥胖 | 中国标准: 肥胖 (≥28) | 国际标准: 重度肥胖 (≥35) | 边界 case:极端肥胖值,III 级肥胖风险 |
| 身高: 100 cm, 体重: 20 kg | BMI: 20.0 | 健康区间: 正常体重 | 中国标准: 正常 (18.5-23.9) | 国际标准: 正常 (18.5-24.9) | 边界 case:儿童身高下限,BMI 公式仍适用 |
| 身高: 200 cm, 体重: 150 kg | BMI: 37.5 | 健康区间: 肥胖 | 中国标准: 肥胖 (≥28) | 国际标准: 肥胖 (≥30) | 边界 case:身高上限+极端体重,运动员也罕见 |
| 身高: 170 cm, 体重: 65 kg, 年龄: 70 岁 | BMI: 22.5 | 健康区间: 正常体重 | 中国标准: 正常 (18.5-23.9) | 国际标准: 正常 (18.5-24.9) | 易错 case:BMI 不区分年龄,老年人正常值同标准 |
| 身高: 170 cm, 体重: 65 kg, 性别: 女 | BMI: 22.5 | 健康区间: 正常体重 | 中国标准: 正常 (18.5-23.9) | 国际标准: 正常 (18.5-24.9) | 易错 case:BMI 不区分性别,男女标准完全相同 |
常见错误对照8 个常踩的坑 · 错误 → 修复
1. 身高单位混淆(厘米 vs 米)
身高输入 1.75(以为是米,但工具默认厘米)身高输入 175(厘米)或确认工具单位后再输入BMI 公式要求身高以米为单位,但多数中文工具输入框默认厘米。1.75 米 = 175 厘米,若按米输入 1.75 会被当成 1.75 厘米,结果偏差巨大。
2. 体重单位混淆(斤 vs 公斤)
体重输入 130(以为是斤,但工具默认公斤)体重输入 65(公斤)或先换算:130 斤 ÷ 2 = 65 公斤中国大陆习惯用斤,但 BMI 公式要求公斤。直接输斤会导致结果翻倍,误判为肥胖。
3. 小数点分隔符用错(点 vs 逗号)
身高输入 1,75(逗号作为小数点)身高输入 1.75(英文句点作为小数点)欧洲习惯用逗号做小数点,但 HTML input[type=number] 和多数 JS 解析只认点。逗号会被当成无效字符或截断。
4. 输入极端值(超出人体范围)
身高输入 250(厘米),体重输入 500(公斤)身高输入 150-220 厘米,体重输入 30-300 公斤BMI 公式本身不限制输入范围,但极端值(如身高 250cm)不现实,结果无参考意义。工具可能不校验,用户需自行判断合理性。
5. 忽略年龄和性别对标准的修正
65 岁男性用通用 BMI 标准(18.5-24)判断健康参考 WHO 或中国指南:老年人(≥65 岁)BMI 建议 20-26.9,略高于通用范围通用 BMI 标准基于年轻成人数据。老年人肌肉流失、骨密度下降,稍高 BMI 反而降低死亡率。儿童/青少年需用百分位曲线。
6. 把 BMI 当体脂率用
健身者 BMI=27 判定为超重,开始节食减重结合体脂率或腰围判断:肌肉量大者 BMI 偏高但体脂正常BMI 不区分肌肉和脂肪。运动员、健身者肌肉密度大,BMI 可能超标但体脂健康。应结合体脂秤、皮褶厚度或腰围(男<90cm,女<85cm)综合评估。
7. 用错标准(中国 vs 国际)
中国人用 WHO 标准(BMI≥25 超重,≥30 肥胖)中国人用中国标准(BMI≥24 超重,≥28 肥胖)WHO 标准基于西方人群,亚洲人体脂率偏高、肌肉量偏低,相同 BMI 下代谢风险更大。中国标准(WS/T 428-2013)更严格,超重/肥胖阈值分别低 1 和 2。
8. 输入时混入非数字字符
身高输入 175cm,体重输入 65kg身高输入 175,体重输入 65(纯数字,不带单位文字)输入框通常只接受数字和小数点。带字母(cm/kg)会被 JS parseInt/parseFloat 截断为 175/65 或直接 NaN,结果不可靠。
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
BMI = W / H²
变量说明
BMI— 身体质量指数(kg/m²)W— 体重(kg)H— 身高(m)
示例
身高 1.75 m,体重 70 kg。H=1.75,W=70。BMI = 70 / (1.75 × 1.75) = 70 / 3.0625 ≈ 22.86 kg/m²。按 WHO 标准(18.5–24.9 正常),此值在正常范围内。
适用范围
适用于 18–65 岁非孕期、非运动员的普通成年人。对肌肉量极高者(如健美运动员)或老年人(肌肉流失)可能高估/低估体脂率。来源:WHO 1995 年《Physical Status》报告。
原理图
开发者集成
3 种主流语言 · 复制即用
import json
def calculate_bmi(weight_kg: float, height_cm: float) -> dict:
"""
计算 BMI 并返回国际标准与中国标准分类。
输入:体重(kg),身高(cm)
"""
if weight_kg <= 0 or height_cm <= 0:
raise ValueError("体重和身高必须为正数")
if height_cm > 250 or weight_kg > 500:
raise ValueError("输入值超出合理范围")
height_m = height_cm / 100
bmi = round(weight_kg / (height_m ** 2), 1)
# WHO 国际标准
if bmi < 18.5:
intl_category = "Underweight"
elif bmi < 25:
intl_category = "Normal"
elif bmi < 30:
intl_category = "Overweight"
else:
intl_category = "Obese"
# 中国标准(WS/T 428-2013)
if bmi < 18.5:
cn_category = "偏瘦"
elif bmi < 24:
cn_category = "正常"
elif bmi < 28:
cn_category = "超重"
else:
cn_category = "肥胖"
return {
"bmi": bmi,
"international": intl_category,
"china": cn_category
}
# 示例
result = calculate_bmi(70, 175)
print(json.dumps(result, ensure_ascii=False))
# 输出:{"bmi": 22.9, "international": "Normal", "china": "正常"}
package main
import (
"fmt"
"math"
)
// BMICategory 存储计算结果
type BMICategory struct {
BMI float64 `json:"bmi"`
International string `json:"international"`
China string `json:"china"`
}
func calculateBMI(weightKg float64, heightCm float64) (BMICategory, error) {
if weightKg <= 0 || heightCm <= 0 {
return BMICategory{}, fmt.Errorf("体重和身高必须为正数")
}
if heightCm > 250 || weightKg > 500 {
return BMICategory{}, fmt.Errorf("输入值超出合理范围")
}
heightM := heightCm / 100
bmi := math.Round(weightKg/(heightM*heightM)*10) / 10
// WHO 国际标准
intl := "Normal"
switch {
case bmi < 18.5:
intl = "Underweight"
case bmi >= 30:
intl = "Obese"
case bmi >= 25:
intl = "Overweight"
}
// 中国标准
cn := "正常"
switch {
case bmi < 18.5:
cn = "偏瘦"
case bmi >= 28:
cn = "肥胖"
case bmi >= 24:
cn = "超重"
}
return BMICategory{BMI: bmi, International: intl, China: cn}, nil
}
func main() {
result, err := calculateBMI(70, 175)
if err != nil {
fmt.Println("错误:", err)
return
}
fmt.Printf("BMI: %.1f, 国际: %s, 中国: %s\n", result.BMI, result.International, result.China)
// 输出:BMI: 22.9, 国际: Normal, 中国: 正常
}
/**
* 计算 BMI 并返回分类结果
* @param {number} weightKg - 体重(公斤)
* @param {number} heightCm - 身高(厘米)
* @returns {{bmi: number, international: string, china: string}}
*/
function calculateBMI(weightKg, heightCm) {
if (weightKg <= 0 || heightCm <= 0) {
throw new Error('体重和身高必须为正数');
}
if (heightCm > 250 || weightKg > 500) {
throw new Error('输入值超出合理范围');
}
const heightM = heightCm / 100;
const bmi = Math.round((weightKg / (heightM ** 2)) * 10) / 10;
// WHO 国际标准
let international;
if (bmi < 18.5) international = 'Underweight';
else if (bmi < 25) international = 'Normal';
else if (bmi < 30) international = 'Overweight';
else international = 'Obese';
// 中国标准
let china;
if (bmi < 18.5) china = '偏瘦';
else if (bmi < 24) china = '正常';
else if (bmi < 28) china = '超重';
else china = '肥胖';
return { bmi, international, china };
}
// 示例
console.log(calculateBMI(70, 175));
// 输出:{ bmi: 22.9, international: 'Normal', china: '正常' }
常见问题
8 个高频疑问