美文网首页
Float转Int误差修正

Float转Int误差修正

作者: T92 | 来源:发表于2017-06-30 18:12 被阅读38次

在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
    }

相关文章

网友评论

      本文标题:Float转Int误差修正

      本文链接:https://www.haomeiwen.com/subject/ubjicxtx.html