
本文教你如何编写一个专业、可复用的 bmi 计算函数,支持传入体重(kg)和身高(m),自动计算并四舍五入返回整数 bmi 值,并解析常见错误原因。
本文教你如何编写一个专业、可复用的 bmi 计算函数,支持传入体重(kg)和身高(m),自动计算并四舍五入返回整数 bmi 值,并解析常见错误原因。
BMI(Body Mass Index,身体质量指数)是评估成年人体重是否处于健康范围的常用指标,计算公式为:
$$ \text{BMI} = \frac{\text{体重(kg)}}{\text{身高(m)}^2} $$
要实现一个健壮、可复用的 BMI 计算函数,需注意三点:正确使用参数、合理命名、明确返回值。以下是推荐的实现方式:
/**
* 计算并返回四舍五入后的 BMI 值
* @param {number} weightInKg - 体重,单位:千克(kg)
* @param {number} heightInMeters - 身高,单位:米(m)
* @returns {number} 四舍五入后的整数 BMI 值
*/
function bmiCalculator(weightInKg, heightInMeters) {
if (typeof weightInKg !== 'number' || typeof heightInMeters !== 'number') {
throw new Error('体重和身高必须为数字类型');
}
if (weightInKg <= 0 || heightInMeters <= 0) {
throw new Error('体重和身高必须为正数');
}
return Math.round(weightInKg / (heightInMeters ** 2));
}
// 示例调用
console.log(bmiCalculator(65, 1.8)); // 输出:20
console.log(bmiCalculator(70, 1.75)); // 输出:23
console.log(bmiCalculator(52, 1.6)); // 输出:20⚠️ 关键纠错说明:
原代码中 bmiCalculator() 未传参,且函数体内硬编码了 65/(1.8*1.8),导致逻辑与函数签名脱节。实际调用时若不传参,weight 和 height 为 undefined,计算结果为 NaN;即使手动调用 bmiCalculator(65, 1.8),原函数也未 return 任何值(默认返回 undefined),因此无法获取结果。
✅ 正确做法是:
- 使用形参 weightInKg 和 heightInMeters 接收输入;
- 直接基于参数计算并 return 结果;
- 避免在函数内部硬编码数值,确保函数纯正、可测试、可复用。
? 进阶建议:
如需更精细的 BMI 分类(如“偏瘦”“正常”“超重”),可在该函数基础上扩展返回对象:
function bmiReport(weightInKg, heightInMeters) {
const bmi = weightInKg / (heightInMeters ** 2);
const rounded = Math.round(bmi);
let category = '未知';
if (bmi < 18.5) category = '偏瘦';
else if (bmi < 24) category = '正常';
else if (bmi < 28) category = '超重';
else category = '肥胖';
return { bmi: rounded, category };
}
console.log(bmiReport(65, 1.8)); // { bmi: 20, category: '正常' }掌握这个简洁而严谨的 BMI 函数,是你构建健康类工具的第一步——它小而精,却已具备生产环境所需的健壮性与可维护性。
立即学习“Java免费学习笔记(深入)”;










