Swift中10*75%计算结果为0的解决及转Int取整至8的方法
问题解答
嘿,我来帮你拆解这两个问题:
1. 不改变变量类型和值,得到正确结果7.5
你碰到的问题本质是整数除法的截断特性——如果a和b都是Int类型(比如let a = 10,let b = 75),直接执行a * b / 100时,所有运算都会以整数规则进行:10*75=750,750/100在整数除法里会直接截断小数部分,得到0。
要在完全保留a、b的类型和值的前提下得到7.5,只需要在计算时把其中一个(或两个)临时转换为浮点数,让运算切换到浮点语境:
let a = 10 // 保持Int类型,值10不变 let b = 75 // 保持Int类型,值75不变 // 方案1:把两个Int都转成Double计算 let correctResult = Double(a) * Double(b) / 100.0 // 方案2:只转其中一个,Swift会自动提升另一个的类型 // let correctResult = Double(a) * b / 100.0
两种方案都能得到精确的7.5,同时a和b还是原来的Int类型和值。
2. 将7.5取整为Int类型的8
如果已经拿到了7.5这个浮点结果,要向上取整到8(注意:默认四舍五入7.5会得到7,而你需要的是向上取整),可以用Swift标准库的ceil()函数,之后再转成Int:
let floatResult = 7.5 // 你的正确计算结果 let roundedInt = Int(ceil(floatResult)) // 最终得到Int类型的8
ceil()的作用是返回大于等于输入值的最小整数,完美匹配你把7.5取整为8的需求。
内容的提问来源于stack exchange,提问作者Leem
相关产品推荐
相关产品推荐

