Float转Int误差修正

2017-06-30  本文已影响38人  T92

在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 = Int(floatNum)
        let ferror = floatNum - Float(intTemp)
        if abs(ferror) > 0.99 {
            if floatNum > 0 {
                intTemp += 1
            }else{
                intTemp -= 1
            }
        }
        return intTemp
    }
//优化
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
    }
上一篇 下一篇

猜你喜欢

热点阅读