Swift中x不等于0时x / 100结果为0的原因是什么?
问题成因
- Swift中默认对两个
Int类型的操作数执行整数截断除法:运算结果会直接舍弃小数部分,仅保留整数位。
你的代码中i是Int类型,字面量100默认也是Int类型,二者做除法得到的结果本身就是Int类型:当i取值1~99时,除法结果的小数部分全部被截断,最终结果为0;仅当i=100时结果为1,符合你观察到的输出表现。 - 你尝试的类型转换写法执行顺序有误:代码
Float(i/100)会先完成两个Int的除法运算得到Int类型的0,再将0转换为Float类型的0.0,因此无法解决问题。
修复方案
仅需要保证除法运算的其中一个操作数为浮点类型,触发Swift的浮点除法规则即可,正确写法参考:
// 写法1:先将i转为Float再做除法 let xValue = Float(i) / 100 // 写法2:将除数写为浮点字面量,触发隐式类型提升 let xValue = i / 100.0
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

