在Swift中将Float类型的值转成Int类型我们通常的做法是
let a: Float = 9.90 * 100
let b = Int(a)
print(b)
看这段代码我们以为转成功后b应该是990,但实际是989
我分析了一下原因,当直接给a赋值而不进行其他运算时不会出错,只会取小数前面的值,但是在对a赋值并进行相关运算操作后就有可能出现误差,而这个误差是总是1,这种现象在各种语言中都存在,下面我写了一个方法进行误差修正,目前没有发现问题
public func floatToInt(floatNum: Float) -> Int{
var intTemp = Int(floatNum)
let ferror = floatNum - Float(intTemp)
guard abs(ferror) > 0.99 else {
return intTemp
}
intTemp += floatNum > 0 ? 1 : -1
return intTemp
}