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

Xcode开发BMI计算器应用运行时计算结果小数位数过多如何解决?

问题原因

直接将Double类型的BMI值转换为String时,会默认输出该浮点数的所有有效小数位,因此会出现小数位数过多的问题,你可以通过浮点数格式化的方式控制输出的小数位数,通常BMI结果保留1~2位小数即可满足使用需求。

修复方案

方案1:使用String内置格式化语法(最简单)

直接在生成String时指定小数保留位数即可,修改后的点击事件代码如下:

@IBAction func btnCalculateBMI(_ sender: Any) {
    // 额外增加非空判断,避免输入非法值时应用崩溃
    guard let heightText = txtHeight.text, let height = Double(heightText), height > 0 else {
        lblOutput.text = "请输入有效的身高"
        return
    }
    guard let weightText = txtWeight.text, let weight = Double(weightText), weight > 0 else {
        lblOutput.text = "请输入有效的体重"
        return
    }
    
    let bmi = weight / (height * height)
    // %.2f代表保留2位小数,要保留1位就改为%.1f,保留整数改为%.0f
    lblOutput.text = String(format: "%.2f", bmi)
}

方案2:使用NumberFormatter(更灵活)

如果需要后续统一调整数字格式、适配不同地区的数字显示习惯,可以用NumberFormatter实现:

@IBAction func btnCalculateBMI(_ sender: Any) {
    guard let heightText = txtHeight.text, let height = Double(heightText), height > 0,
          let weightText = txtWeight.text, let weight = Double(weightText), weight > 0 else {
        lblOutput.text = "请输入有效的身高体重"
        return
    }
    
    let bmi = weight / (height * height)
    
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.maximumFractionDigits = 2 // 最多保留2位小数
    formatter.minimumFractionDigits = 1 // 最少保留1位小数,可按需调整
    if let formattedBmi = formatter.string(from: NSNumber(value: bmi)) {
        lblOutput.text = formattedBmi
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:18:00