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
相关产品推荐
相关产品推荐

