You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中字符串转整数计算BMI,如何正确获取四位小数结果?

解决方案

核心问题是Java默认的整数除法规则:两个int类型数值相除时,会直接丢弃小数部分返回int类型结果,即使后续赋值给float类型也无法恢复丢失的小数位。你不需要修改现有入参转Integer的逻辑,只需调整运算时的类型转换逻辑即可:

方案1:直接在运算时触发浮点转换(最简实现)

仅需修改BMI计算行,在除法运算前将任意一个操作数强转为float,即可触发浮点数运算,保留完整小数位:

public boolean calculateBMI() {
    int totalWeight = Integer.parseInt(gewicht);
    int totalHeight = Integer.parseInt(koerpergroesse);
    // 运算前强制转换为float,避免整数除法精度丢失
    float bmi = (float) totalWeight / (totalHeight * totalHeight);

    if (bmi > 0.0030 && bmi <= 0.0040) {
      return true;
    }
    return false;
}

你提供的测试用例(身高183、体重120)经该代码计算可得BMI≈0.00358,完全符合你的精度要求。

方案2:明确保留四位小数(如需固定精度输出)

如果需要严格限定BMI结果最多保留四位小数,可搭配BigDecimal做精度控制:

import java.math.BigDecimal;
import java.math.RoundingMode;

public boolean calculateBMI() {
    int totalWeight = Integer.parseInt(gewicht);
    int totalHeight = Integer.parseInt(koerpergroesse);
    float bmi = (float) totalWeight / (totalHeight * totalHeight);
    // 保留四位小数,采用四舍五入规则
    bmi = new BigDecimal(bmi).setScale(4, RoundingMode.HALF_UP).floatValue();

    if (bmi > 0.0030 && bmi <= 0.0040) {
      return true;
    }
    return false;
}

额外说明

也可以通过乘以1.0F的方式触发浮点运算,效果和强制类型转换完全一致:

float bmi = totalWeight * 1.0F / (totalHeight * totalHeight);

内容的提问来源于stack exchange,提问作者DWA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:36:09