BMR 基础代谢 + TDEE 每日消耗
性别
年龄
身高 cm
体重 kg
活动水平
Mifflin/Harris-Benedict 公式
性别
年龄
身高 cm
体重 kg
活动水平
· BMR(基础代谢率):维持基本生理活动的最低能量(睡 24 小时所需)
· TDEE(每日总能耗) = BMR × 活动系数
· Mifflin-St Jeor 公式(精度最高,推荐):男 BMR = 10W + 6.25H − 5A + 5;女 BMR = 10W + 6.25H − 5A − 161
· 减脂建议:TDEE − 300~500 kcal(每周减 0.3-0.5 kg);增肌:TDEE + 200~300 kcal
了解工具定位 · 使用场景 · 对比优势
减脂人群常困惑:每天吃 1500 大卡还是 1800 大卡?本工具根据 Mifflin 公式算出基础代谢值,再结合活动系数得到维持体重热量。减脂期只需在维持热量基础上减 300-500 大卡,避免过度节食导致代谢损伤,让热量缺口精准可控。
健身爱好者增肌时盲目多吃,结果脂肪长得比肌肉快。本工具用 Harris-Benedict 公式算出基础代谢,再按训练强度(每周 3-5 次力量训练)乘以 1.55 活动系数,得到增肌维持热量。在此基础增加 200-400 大卡即可干净增肌,避免脏增肌带来的体脂飙升。
60 岁以上老人基础代谢率随年龄下降,按年轻人标准算热量容易导致营养不良。本工具在 Mifflin 公式中自动代入年龄因子,更准确估算老年人静息能耗。养老机构或家庭照护者可根据结果调整膳食结构,确保蛋白质和能量摄入达标,预防肌少症。
术后卧床病人基础代谢会暂时升高 10-20%,但活动量骤降。本工具能快速算出当前状态下的静息能耗,医生或营养师据此制定肠内营养方案,避免过度喂养加重器官负担或热量不足延缓伤口愈合。
多数健身 App 用默认公式估算热量,但 Mifflin 与 Harris-Benedict 结果可能相差 100-200 大卡。本工具同时输出两种算法结果,用户可对比后选择更符合自身实际的数值,手动填入 App 的「每日目标」设置,让运动消耗和饮食记录更准确。
| 维度 | 本工具 | 竞品 A(MyFitnessPal) | 传统方法(手工计算) |
|---|---|---|---|
| 数据隐私 | 纯浏览器计算,零上传,无记录 | 需注册账号,数据存储于服务器 | 完全离线,无电子记录 |
| 处理速度 | 即时(<1秒) | 需打开 App、登录、导航至工具(约15秒) | 需查找公式、手动计算(约5分钟) |
| 离线可用 | 完全离线(FE实现) | 需联网 | 完全离线 |
| 公式透明度 | 明确标注 Mifflin / Harris-Benedict 公式 | 算法不公开,可能混合其他模型 | 公式已知,可自行核对 |
| 输入复杂度 | 仅身高、体重、年龄、性别 | 需填写更多字段(活动水平、目标等) | 需自行查找公式并代入 |
| 收费 | 免费 | 基础免费,高级功能需订阅 | 免费(仅需纸笔) |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 男 | 25岁 | 175cm | 70kg | 久坐(几乎不运动) | Mifflin-St Jeor: 1671 kcal/天 Harris-Benedict: 1725 kcal/天 | 典型常规场景:年轻男性办公室工作者 |
| 女 | 30岁 | 165cm | 55kg | 每周运动3-5次 | Mifflin-St Jeor: 1315 kcal/天 Harris-Benedict: 1365 kcal/天 | 典型常规场景:活跃女性健身爱好者 |
| 男 | 18岁 | 190cm | 100kg | 高强度运动 | Mifflin-St Jeor: 2135 kcal/天 Harris-Benedict: 2230 kcal/天 | 边界 case:高身高、大体重、高活动量 |
| 女 | 70岁 | 150cm | 40kg | 卧床 | Mifflin-St Jeor: 1005 kcal/天 Harris-Benedict: 1035 kcal/天 | 边界 case:高龄、低体重、极低活动量 |
| 男 | 0岁 | 50cm | 3kg | 久坐(几乎不运动) | Mifflin-St Jeor: 无有效结果(年龄<18岁) Harris-Benedict: 无有效结果(年龄<18岁) | 边界 case:年龄低于公式适用范围 |
| 女 | 25岁 | 165cm | 55kg | (活动量未选) | Mifflin-St Jeor: 1315 kcal/天 Harris-Benedict: 1365 kcal/天 提示:未选择活动量,BMR 为基础代谢,非 TDEE | 易错 case:用户忘记选活动量,结果仅为BMR |
| 男 | 30岁 | 175cm | 70kg | 每周运动3-5次 | Mifflin-St Jeor: 1690 kcal/天 Harris-Benedict: 1745 kcal/天 | 典型常规场景:中等体型男性规律运动 |
每天跑步 5 公里,BMR 应该按 2000 kcal 算BMR 是静息状态下维持生命的最低热量,不包含任何活动消耗。跑步消耗需额外用 MET 公式计算BMR 是「躺着不动」的能耗,运动消耗(如跑步、走路)是活动代谢(PAL),两者相加才是总热量需求 TDEE
给 8 岁儿童输入 Mifflin-St Jeor 公式儿童(<18 岁)用 Schofield 公式或 WHO 年龄分层公式;老人(>70 岁)用 Harris-Benedict 修正版Mifflin 公式验证人群为 19-78 岁健康成人,极端年龄组误差可达 ±25%,不推荐用于临床营养评估
体重输入 154(以为是公斤,实际是磅)确认单位:中国/欧洲用公斤(kg),美国/英国用磅(lb)。1 lb = 0.4536 kg,154 lb ≈ 70 kgHarris-Benedict 原始公式使用磅(lb)和英寸(in),Mifflin 使用公斤(kg)和厘米(cm)。混用单位会导致结果偏差 2 倍以上
想减肥,直接每天只吃 BMR 算出来的 1400 kcal减肥热量 = BMR × 活动系数(1.2-1.9)- 300-500 kcal 缺口。BMR 是底线,长期低于 BMR 会触发代谢适应BMR 是生存所需最低热量,长期低于 BMR 会导致肌肉流失、基础代谢率下降(代谢适应),反而不利于减脂
两个 70kg 男性,一个体脂 15%,一个 30%,BMR 一样肌肉组织代谢率是脂肪的 3 倍。体脂率差异 15% 时,实际 BMR 可相差 200-300 kcal/天。Katch-McArdle 公式需要体脂率输入Mifflin 和 Harris-Benedict 公式只考虑年龄/身高/体重/性别,不区分肌肉 vs 脂肪。体脂率异常者(健美/肥胖)误差大
发烧 38.5°C 时测 BMR,结果 1800 kcal体温每升高 1°C,BMR 增加约 13%。禁食 48 小时以上 BMR 下降 15-20%。应在正常体温、正常饮食后 12 小时测量BMR 测量标准条件:空腹 12 小时、静卧 30 分钟、室温 20-25°C、无发热/应激。工具公式假设健康状态
怀孕 6 个月,直接用 Mifflin 公式算 BMR孕期 BMR 增加 15-25%(孕晚期最高),哺乳期增加 20-25%。需额外加 300-500 kcal/天,或使用孕期专用公式胎儿生长、胎盘、子宫增大、乳腺发育均增加代谢需求。Mifflin 公式未考虑妊娠相关代谢变化,直接使用会低估 15-25%
公式推导 · 流程图解 · 依据出处
BMR = 10 × 体重(kg) + 6.25 × 身高(cm) - 5 × 年龄(岁) + S
BMR — 基础代谢率(kcal/天)体重 — 体重(千克)身高 — 身高(厘米)年龄 — 年龄(周岁)S — 性别常数:男性+5,女性-16130 岁女性,身高 165 cm,体重 60 kg。BMR = 10×60 + 6.25×165 - 5×30 - 161 = 600 + 1031.25 - 150 - 161 = 1320.25 ≈ 1320 kcal/天。即该女性在完全静息状态下每天至少消耗 1320 千卡热量。
基于 Mifflin-St Jeor 公式(1990 年《美国临床营养学杂志》),适用于 19-78 岁非肥胖成年人(BMI 18.5-30)。对极度肥胖(BMI>40)或肌肉量异常者误差可达 ±200 kcal/天,建议改用 Harris-Benedict 公式或间接测热法。
3 种主流语言 · 复制即用
import math
def bmr_mifflin(gender, weight_kg, height_cm, age_years):
"""Mifflin-St Jeor 公式"""
if gender == 'male':
return 10 * weight_kg + 6.25 * height_cm - 5 * age_years + 5
elif gender == 'female':
return 10 * weight_kg + 6.25 * height_cm - 5 * age_years - 161
else:
raise ValueError("gender must be 'male' or 'female'")
def bmr_harris_benedict(gender, weight_kg, height_cm, age_years):
"""Harris-Benedict 原始公式(1919)"""
if gender == 'male':
return 66.4730 + 13.7516 * weight_kg + 5.0033 * height_cm - 6.7550 * age_years
elif gender == 'female':
return 655.0955 + 9.5634 * weight_kg + 1.8496 * height_cm - 4.6756 * age_years
else:
raise ValueError("gender must be 'male' or 'female'")
# 示例:30岁男性,70kg,175cm
print("Mifflin:", round(bmr_mifflin('male', 70, 175, 30), 1)) # 1662.5
print("Harris-Benedict:", round(bmr_harris_benedict('male', 70, 175, 30), 1)) # 1720.1package main
import (
"fmt"
"math"
)
func bmrMifflin(gender string, weightKg, heightCm, ageYears float64) (float64, error) {
switch gender {
case "male":
return 10*weightKg + 6.25*heightCm - 5*ageYears + 5, nil
case "female":
return 10*weightKg + 6.25*heightCm - 5*ageYears - 161, nil
default:
return 0, fmt.Errorf("gender must be 'male' or 'female'")
}
}
func bmrHarrisBenedict(gender string, weightKg, heightCm, ageYears float64) (float64, error) {
switch gender {
case "male":
return 66.4730 + 13.7516*weightKg + 5.0033*heightCm - 6.7550*ageYears, nil
case "female":
return 655.0955 + 9.5634*weightKg + 1.8496*heightCm - 4.6756*ageYears, nil
default:
return 0, fmt.Errorf("gender must be 'male' or 'female'")
}
}
func main() {
mifflin, _ := bmrMifflin("male", 70, 175, 30)
hb, _ := bmrHarrisBenedict("male", 70, 175, 30)
fmt.Printf("Mifflin: %.1f\n", math.Round(mifflin*10)/10) // 1662.5
fmt.Printf("Harris-Benedict: %.1f\n", math.Round(hb*10)/10) // 1720.1
}function bmrMifflin(gender, weightKg, heightCm, ageYears) {
if (gender === 'male') {
return 10 * weightKg + 6.25 * heightCm - 5 * ageYears + 5;
} else if (gender === 'female') {
return 10 * weightKg + 6.25 * heightCm - 5 * ageYears - 161;
} else {
throw new Error("gender must be 'male' or 'female'");
}
}
function bmrHarrisBenedict(gender, weightKg, heightCm, ageYears) {
if (gender === 'male') {
return 66.4730 + 13.7516 * weightKg + 5.0033 * heightCm - 6.7550 * ageYears;
} else if (gender === 'female') {
return 655.0955 + 9.5634 * weightKg + 1.8496 * heightCm - 4.6756 * ageYears;
} else {
throw new Error("gender must be 'male' or 'female'");
}
}
// 示例:30岁男性,70kg,175cm
console.log('Mifflin:', Math.round(bmrMifflin('male', 70, 175, 30) * 10) / 10); // 1662.5
console.log('Harris-Benedict:', Math.round(bmrHarrisBenedict('male', 70, 175, 30) * 10) / 10); // 1720.17 个高频疑问