Float转Int误差修正

在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
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容