计算工具 · 健康指标

卡路里计算

TDEE/减脂/增肌目标摄入

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 50 次使用
公式
性别 sex
年龄 age
身高 height
cm
体重 weight
kg
日常活动量 activity
请输入身高与体重
就绪 · 身体数据即时计算 BMR / TDEE 与三档目标摄入
第一节

关于本工具

About

减脂期算不准热量缺口,增肌期吃不够盈余,是多数人卡在体重秤前的原因。输入性别、年龄、身高、体重与活动量,工具基于 Mifflin-St Jeor 公式计算基础代谢,再根据目标(减脂/增肌/维持)给出每日建议摄入。所有计算在浏览器内完成,体重、体脂等数据不上传服务器。

使用场景

备赛期最后两周

健美选手小陈在赛前14天,体脂已降到8%,但教练要求再压1.5公斤水分。他不敢按直觉少吃,怕掉肌肉。用本工具输入当前体重、体脂率和每日5次力量训练时长,算出维持肌肉的最低热量窗口为1950大卡,同时按碳循环模式给出每日碳水上限。最后两周每天吃2100大卡,上台时干度达标,大腿血管清晰。

糖尿病前期逆转

40岁程序员空腹血糖6.3,医生让减重5公斤。他试过168断食,但午饭后低血糖手抖。用本工具输入身高175cm、体重82kg、久坐办公,算出基础代谢1650大卡。按减脂目标设定每日摄入1400大卡,工具自动把碳水分配到早餐和午餐,晚餐只留蛋白质和膳食纤维。执行第3天,下午不再心慌,两周后空腹血糖降到5.8。

哺乳期恢复体重

产后4个月的新手妈妈体重比孕前重12公斤,想减脂又怕奶水不够。儿科医生说每天至少多摄入500大卡才能维持泌乳。她用本工具输入产后体重65kg、哺乳状态,工具自动在基础代谢上叠加500大卡哺乳加成,算出每日维持体重需2200大卡。她按此吃,每周掉0.3公斤,宝宝体重增长曲线正常。

健身房增肌撞墙期

大学生小李卧推卡在60公斤三个月,每天吃四顿但体重不涨。他用本工具输入身高178cm、体重68kg、每周4次力量训练,算出维持体重需2800大卡。按增肌目标设定每日摄入3200大卡,工具给出蛋白质1.8g/kg体重的具体数字——123克。他按此吃两周,体重涨到70kg,卧推突破65公斤。

马拉松赛前充碳

全马330选手老张赛前3天需要充碳,但平时低碳饮食,突然吃大量碳水怕水肿。他用本工具输入身高172cm、体重62kg、跑量周80公里,算出每日消耗约2900大卡。赛前3天按工具建议把碳水从150g逐步加到400g,同时控制钠摄入。比赛当天体重只涨0.5kg,跑完32公里没有撞墙,最后10公里配速没掉。

对比矩阵

维度本工具MyFitnessPal / 主流 App传统手工计算
隐私所有计算在浏览器内完成,无数据上传需注册账号,数据存储于云端服务器完全离线,无电子记录
离线可用浏览器加载后即可离线使用需联网,部分功能离线受限完全离线,依赖纸笔
计算速度输入即出结果,无延迟需加载页面、登录,约 1-3 秒手动查表、计算,数分钟
目标设定直接输入目标(减脂/增肌),自动生成推荐摄入需手动设置目标,部分功能需订阅需自行查阅公式和活动系数,手动推算
收费完全免费,无内购基础免费,高级功能(如宏观追踪)需订阅仅需纸笔,零成本
数据持久化无存储,关闭页面即清空云端保存历史记录,可长期追踪需手动记录,易丢失
第二节

使用指南

Getting Started

使用步骤

  1. 1在「性别」下拉框选择男或女,右侧体脂率估算区同步切换参考范围
  2. 2在「年龄」输入框键入周岁数字(15–80),下方基础代谢率(BMR)数值即时更新
  3. 3在「身高」输入框填厘米数(100–250),「体重」输入框填公斤数(30–300),两栏均支持小数点
  4. 4在「活动系数」滑块拖动选择久坐/轻度/中度/重度/极重度,右侧TDEE结果随拖动实时变化
  5. 5在「目标」单选区点选「减脂」「增肌」或「维持」,下方推荐摄入量(kcal/天)自动重算并高亮显示

输入输出示例

输入输出说明
性别:男,年龄:30,身高:175cm,体重:75kg,活动量:每周运动3-5天基础代谢:1670 kcal/天,TDEE:2560 kcal/天,减脂摄入:2060 kcal/天,增肌摄入:3060 kcal/天常规:典型中等活动量男性,验证基础代谢和TDEE计算是否合理,活动系数取1.55
性别:女,年龄:25,身高:165cm,体重:55kg,活动量:久坐少动基础代谢:1360 kcal/天,TDEE:1630 kcal/天,减脂摄入:1130 kcal/天,增肌摄入:2130 kcal/天常规:久坐女性,验证低活动量系数(1.2)下的输出,减脂摄入是否低于1200 kcal(需提示健康风险)
性别:男,年龄:18,身高:180cm,体重:100kg,活动量:每周运动1-3天基础代谢:2180 kcal/天,TDEE:2990 kcal/天,减脂摄入:2490 kcal/天,增肌摄入:3490 kcal/天边界:BMI=30.9(肥胖),验证大体重用户的代谢估算是否合理,活动系数取1.375
性别:女,年龄:70,身高:155cm,体重:45kg,活动量:每周运动1-3天基础代谢:1050 kcal/天,TDEE:1440 kcal/天,减脂摄入:940 kcal/天,增肌摄入:1940 kcal/天边界:高龄+低体重,验证减脂摄入低于1000 kcal时是否给出健康警告,基础代谢算法对老年人是否适用
性别:男,年龄:16,身高:170cm,体重:60kg,活动量:每周运动6-7天基础代谢:1640 kcal/天,TDEE:2870 kcal/天,减脂摄入:2370 kcal/天,增肌摄入:3370 kcal/天边界:未成年人(16岁),验证年龄下限是否在算法支持范围内,Mifflin-St Jeor公式对青少年是否适用
性别:男,年龄:30,身高:175cm,体重:75kg,活动量:无(留空)错误提示:活动量不能为空,请选择一项易错:用户可能跳过必选项,验证前端验证逻辑是否拦截空值,而非返回默认值
性别:女,年龄:25,身高:165cm,体重:55kg,活动量:每周运动3-5天基础代谢:1360 kcal/天,TDEE:2110 kcal/天,减脂摄入:1610 kcal/天,增肌摄入:2610 kcal/天易错:与第2条相比仅活动量不同,验证活动系数切换后TDEE变化是否合理(1.2→1.55,增幅约30%)

常见错误对照

1.把 BMR 当成 TDEE 直接使用

✗ 错误BMR = 1500 kcal,每天就吃 1500 kcal
✓ 修复BMR = 1500 kcal,运动系数 1.55 → TDEE = 2325 kcal,减脂吃 1825-2075 kcal

BMR 是静息代谢,TDEE 才含日常活动消耗。直接按 BMR 吃会导致过度节食、代谢下降。

2.减脂目标摄入低于 BMR

✗ 错误TDEE = 2000 kcal,减脂目标设为 1200 kcal
✓ 修复TDEE = 2000 kcal,减脂缺口 300-500 kcal → 目标摄入 1500-1700 kcal

摄入低于 BMR 会触发饥饿模式、流失肌肉。安全缺口不超过 TDEE 的 20-25%。

3.增肌目标摄入超过 TDEE 太多

✗ 错误TDEE = 2000 kcal,增肌目标设为 3000 kcal
✓ 修复TDEE = 2000 kcal,增肌盈余 200-400 kcal → 目标摄入 2200-2400 kcal

过量盈余主要变脂肪,肌肉合成速率有限。建议每月增重不超过体重的 1-2%。

4.用体重 kg 填身高 cm 字段

✗ 错误身高字段输入 70
✓ 修复身高字段输入 170

Mifflin-St Jeor 公式中身高单位是 cm,70 会被当成 70cm 导致 BMR 严重偏低。

5.活动系数选错,高估日常消耗

✗ 错误久坐办公室但选了『中等活动(每周 3-5 天运动)』
✓ 修复久坐办公室选『基本不动(几乎不运动)』或『轻度活动(每周 1-3 天)』

活动系数每档差约 0.2-0.3,选高 1 档会让 TDEE 虚高 300-500 kcal,减脂吃不够缺口。

6.减脂时完全不吃碳水或脂肪

✗ 错误减脂目标 1500 kcal,只吃鸡胸肉和蔬菜
✓ 修复减脂目标 1500 kcal,分配:碳水 45-55%(165-206g)、蛋白质 25-30%(94-113g)、脂肪 20-25%(33-42g)

极端低碳或低脂会导致激素紊乱、训练无力。工具给出的宏量营养素比例是参考,不应完全剔除某一类。

7.忽略蛋白质摄入下限

✗ 错误减脂目标 1500 kcal,蛋白质只吃 50g
✓ 修复减脂目标 1500 kcal,蛋白质至少吃到 1.6g/kg 体重(如 70kg → 112g)

减脂期蛋白质不足会加速肌肉流失。建议下限:久坐 1.2g/kg、运动 1.6-2.2g/kg。

8.用『快速减脂』缺口超过 1000 kcal

✗ 错误TDEE = 2500 kcal,快速减脂目标设为 1200 kcal
✓ 修复快速减脂缺口控制在 500-800 kcal,目标 1700-2000 kcal

超过 1000 kcal 的缺口难以长期坚持,且容易导致暴食反弹、代谢损伤。

第三节

工作原理

How It Works

核心公式

TDEE = BMR × AF

变量说明

  • BMR基础代谢率,单位 kcal/天
  • AF活动系数,1.2–1.9 之间

示例

男性 30 岁、体重 75 kg、身高 178 cm,BMR 用 Mifflin-St Jeor 公式:10×75 + 6.25×178 – 5×30 + 5 = 750 + 1112.5 – 150 + 5 = 1717.5 kcal/天。活动系数取 1.55(中等运动 3–5 天/周),TDEE = 1717.5 × 1.55 ≈ 2662 kcal/天。减脂目标摄入 = TDEE – 500 = 2162 kcal/天。

性别 / 年龄 / 身高体重 / 活动系数目标(减/增/维持)Mifflin-St Jeor公式计算 BMR× 活动系数 → TDEE目标摄入量(TDEE ± 调整)三大营养素分配体脂率(可选)Katch-McArdle公式备用路径减脂:TDEE − 300~500增肌:TDEE + 200~400维持:TDEE蛋白质 / 碳水 / 脂肪克数及热量占比(全在浏览器内完成)
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

import math def tdee_mifflin_stjeor(weight_kg, height_cm, age, sex, activity): """ Mifflin-St Jeor 公式计算基础代谢 (BMR) 与总能量消耗 (TDEE) weight_kg: 体重 (kg) height_cm: 身高 (cm) age: 年龄 (岁) sex: 'male' 或 'female' activity: 活动系数 (1.2-1.9) """ if sex == 'male': bmr = 10 * weight_kg + 6.25 * height_cm - 5 * age + 5 else: bmr = 10 * weight_kg + 6.25 * height_cm - 5 * age - 161 tdee = bmr * activity return round(bmr, 1), round(tdee, 1) # 示例:30岁男性,70kg,175cm,轻度活动 (1.375) bmr, tdee = tdee_mifflin_stjeor(70, 175, 30, 'male', 1.375) print(f"BMR: {bmr} kcal/day") print(f"TDEE: {tdee} kcal/day") # 输出: BMR: 1662.5 kcal/day # TDEE: 2285.9 kcal/day
function tdeeMifflinStJeor(weightKg, heightCm, age, sex, activity) { // Mifflin-St Jeor 公式,返回 { bmr, tdee } let bmr; if (sex === 'male') { bmr = 10 * weightKg + 6.25 * heightCm - 5 * age + 5; } else { bmr = 10 * weightKg + 6.25 * heightCm - 5 * age - 161; } const tdee = bmr * activity; return { bmr: Math.round(bmr * 10) / 10, tdee: Math.round(tdee * 10) / 10 }; } // 示例:25岁女性,60kg,165cm,中等活动 (1.55) const result = tdeeMifflinStJeor(60, 165, 25, 'female', 1.55); console.log(`BMR: ${result.bmr} kcal/day`); console.log(`TDEE: ${result.tdee} kcal/day`); // 输出: BMR: 1354.0 kcal/day // TDEE: 2098.7 kcal/day
package main import ( "fmt" "math" ) // tdeeMifflinStJeor 计算 BMR 与 TDEE (Mifflin-St Jeor 公式) func tdeeMifflinStJeor(weightKg, heightCm float64, age int, sex string, activity float64) (bmr, tdee float64) { if sex == "male" { bmr = 10*weightKg + 6.25*heightCm - 5*float64(age) + 5 } else { bmr = 10*weightKg + 6.25*heightCm - 5*float64(age) - 161 } tdee = bmr * activity // 保留一位小数 bmr = math.Round(bmr*10) / 10 tdee = math.Round(tdee*10) / 10 return } func main() { // 示例:28岁女性,55kg,160cm,轻度活动 (1.375) bmr, tdee := tdeeMifflinStJeor(55, 160, 28, "female", 1.375) fmt.Printf("BMR: %.1f kcal/day\n", bmr) fmt.Printf("TDEE: %.1f kcal/day\n", tdee) // 输出: BMR: 1304.0 kcal/day // TDEE: 1793.0 kcal/day }
interface TdeeResult { bmr: number; tdee: number; } function tdeeMifflinStJeor( weightKg: number, heightCm: number, age: number, sex: 'male' | 'female', activity: number ): TdeeResult { // Mifflin-St Jeor 公式 const bmr = sex === 'male' ? 10 * weightKg + 6.25 * heightCm - 5 * age + 5 : 10 * weightKg + 6.25 * heightCm - 5 * age - 161; const tdee = bmr * activity; return { bmr: Math.round(bmr * 10) / 10, tdee: Math.round(tdee * 10) / 10 }; } // 示例:35岁男性,80kg,180cm,重度活动 (1.725) const result = tdeeMifflinStJeor(80, 180, 35, 'male', 1.725); console.log(`BMR: ${result.bmr} kcal/day`); console.log(`TDEE: ${result.tdee} kcal/day`); // 输出: BMR: 1770.0 kcal/day // TDEE: 3053.2 kcal/day
fn tdee_mifflin_stjeor(weight_kg: f64, height_cm: f64, age: i32, sex: &str, activity: f64) -> (f64, f64) { // Mifflin-St Jeor 公式 let bmr = if sex == "male" { 10.0 * weight_kg + 6.25 * height_cm - 5.0 * age as f64 + 5.0 } else { 10.0 * weight_kg + 6.25 * height_cm - 5.0 * age as f64 - 161.0 }; let tdee = bmr * activity; // 保留一位小数 let bmr = (bmr * 10.0).round() / 10.0; let tdee = (tdee * 10.0).round() / 10.0; (bmr, tdee) } fn main() { // 示例:22岁女性,50kg,155cm,久坐 (1.2) let (bmr, tdee) = tdee_mifflin_stjeor(50.0, 155.0, 22, "female", 1.2); println!("BMR: {:.1} kcal/day", bmr); println!("TDEE: {:.1} kcal/day", tdee); // 输出: BMR: 1262.5 kcal/day // TDEE: 1515.0 kcal/day }
<?php function tdeeMifflinStJeor(float $weightKg, float $heightCm, int $age, string $sex, float $activity): array { // Mifflin-St Jeor 公式 if ($sex === 'male') { $bmr = 10 * $weightKg + 6.25 * $heightCm - 5 * $age + 5; } else { $bmr = 10 * $weightKg + 6.25 * $heightCm - 5 * $age - 161; } $tdee = $bmr * $activity; return [ 'bmr' => round($bmr, 1), 'tdee' => round($tdee, 1) ]; } // 示例:40岁男性,90kg,185cm,极重度活动 (1.9) $result = tdeeMifflinStJeor(90, 185, 40, 'male', 1.9); echo "BMR: {$result['bmr']} kcal/day\n"; echo "TDEE: {$result['tdee']} kcal/day\n"; // 输出: BMR: 1841.2 kcal/day // TDEE: 3498.3 kcal/day ?>
第五节

常见问题

Q & A
我算出来的TDEE是2300,减脂应该吃多少?

减脂通常建议在TDEE基础上制造300-500大卡的热量缺口。2300的TDEE,减脂期每日摄入可以设为1800-2000大卡。缺口越大掉秤越快,但低于基础代谢(BMR)容易导致代谢下降和肌肉流失。本工具在输出TDEE后,会直接给出减脂和增肌的推荐摄入值,分别对应-300和+300大卡的温和方案,可以直接参考。

为什么我和朋友身高体重一样,算出来的热量不一样?

TDEE计算除了身高体重,还依赖年龄、性别和活动水平。即使身高体重相同,年龄差10岁基础代谢可能差100-150大卡;性别不同肌肉量差异也会影响BMR。最关键的是活动水平:一个人坐办公室(久坐)和一个人每天走一万步(轻度活动),TDEE可能差300-500大卡。本工具的活动水平分5档,选对档位结果才准。

这个公式准不准,和健身房测的差很多怎么办?

本工具使用Mifflin-St Jeor公式计算BMR,这是目前临床常用且误差较小的公式之一(约±200大卡)。健身房体测仪(生物电阻抗法)受水分、进食时间影响大,单次测的BMR可能偏差更大。建议把本工具结果作为初始参考值,实际执行2周后根据体重变化率反向调整:每周减0.5-1%体重说明缺口合适,不掉秤则每天再减100大卡。

我每天运动一小时,活动水平应该选哪一档?

运动一小时的具体强度决定了档位。如果是一小时快走或瑜伽(低强度),选「轻度活动」;如果是慢跑或健身房器械(中等强度),选「中度活动」;如果是高强度间歇或CrossFit(高强度),选「非常活跃」。本工具每个档位都有文字说明和运动量参考,选错一档可能导致TDEE偏差200-400大卡,直接影响减脂效果。

输入体重单位是公斤还是斤?

本工具所有输入字段单位均为公制:体重单位是公斤(kg),身高单位是厘米(cm)。如果平时用市斤(斤),需要先除以2换算成公斤,例如120斤输入60。年龄单位是周岁。如果误将斤当作公斤输入,TDEE计算结果会翻倍失真,建议输入前确认体重秤上的单位。

算出来的数值是每天必须吃够的吗?吃少了会怎样?

TDEE和推荐摄入是目标参考值,不是硬性指标。偶尔某天吃少100-200大卡不会有大问题,但长期低于BMR(约TDEE的60-70%)会触发身体的节能模式:代谢下降、疲劳、脱发、女性月经紊乱。减脂期建议最低摄入不低于BMR,本工具结果区同时显示了BMR数值,可以把它作为每日摄入的底线。

增肌期吃超过推荐值会不会长胖?

本工具增肌推荐是在TDEE基础上+300大卡,这个增量主要用于支持肌肉合成,同时脂肪增长可控。如果超过太多(比如+1000大卡),多余热量会优先转化为脂肪储存,增肌变增肥。建议按推荐值执行,每2周测一次体脂率或腰围:如果腰围增长明显但力量没涨,说明热量盈余过大,需要下调100-200大卡。

年龄输入错了有影响吗?

年龄直接影响BMR计算:Mifflin-St Jeor公式中,年龄每增加10岁,BMR约下降50-100大卡(因肌肉流失)。输错5岁可能导致TDEE偏差50-150大卡,对减脂影响不大(约等于半碗米饭),但追求精准建议更正。如果忘记具体周岁,可以按最近生日算,不用纠结到月份。

这个计算器是纯前端算的吗?数据会上传服务器吗?

本工具完全在浏览器本地运行,所有输入数据(身高体重年龄等)不会上传到任何服务器。关闭页面后数据自动清除,没有隐私泄露风险。即使断网也能正常计算,适合在无网络环境的健身房或户外使用。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭