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

Swift中计算百分比结果始终为0的技术求助

问题原因与解决方案

问题原因

你遇到的问题是Swift整数除法的特性导致的:当两个Int类型的值执行除法运算时,Swift会直接舍弃小数部分,只保留整数结果。你的例子中46 / 151的实际数学结果约为0.304,但整数除法会返回0,后续将这个0乘以100再转成Double,自然得到0.0。

解决方案

有两种可靠的修复方式,优先推荐第一种(避免整数溢出风险):

方案一:先转换为浮点数再计算

将其中一个或两个整数转换为Double后再执行除法,这样整个运算会以浮点数精度进行,保留小数部分:

func calcPercent(value: Int, total: Int) -> Double {
    // 先判断total不为0,避免除以0引发运行时错误
    guard total != 0 else { return 0.0 }
    let perc = Double(value) / Double(total) * 100
    
    NSLog("Value: \(value)")
    NSLog("Total: \(total)")
    NSLog("Perc: \(perc)")
    
    return perc
}

使用你的测试值value=46、total=151,该函数会返回约30.4635的正确结果。

方案二:先计算乘积再转换类型(需注意溢出)

如果业务场景中value * 100不会超出Int的取值范围,也可以先计算乘积再转换为Double做除法:

func calcPercent(value: Int, total: Int) -> Double {
    guard total != 0 else { return 0.0 }
    let perc = Double(value * 100) / Double(total)
    
    NSLog("Value: \(value)")
    NSLog("Total: \(total)")
    NSLog("Perc: \(perc)")
    
    return perc
}

⚠️ 注意:如果value较大,value * 100可能会超出Int的最大值,引发整数溢出错误,因此这种方式仅适用于数值范围明确不会溢出的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:00:03