首页 > 解决方案 > Swift - 从 Double 中自行获取最接近的十分之一的提醒

问题描述

我有一个视频,我需要将秒和毫秒分开,并将毫秒四舍五入到最接近的十分之一。如果视频持续时间从4.333333333333333秒开始,我用floor(num * 10) / 10它来达到4.3。当我尝试自己使用.truncatingRemainder(dividingBy: 1)和/或modf(num).1我不断获得0.2999999999999998而不是0.3时。为什么会这样?

let mixCompositionDuration = CMTimeGetSeconds(mixComposition.duration)
print("mixCompositionDuration: ", mixCompositionDuration) // 4.333333333333333
            
let dubl = Double(mixCompositionDuration)
print("dubl: ", dubl) // 4.333333333333333
            
let mixCompositionRoundDown = floor(dubl * 10) / 10
print("mixCompositionRoundDown: ", mixCompositionRoundDown)  // 4.3

let remainder = mixCompositionRoundDown.truncatingRemainder(dividingBy: 1)
print("remainder: ", remainder) // 0.2999999999999998

let mod = modf(mixCompositionRoundDown)
print("mod: ", mod) // (4.0, 0.2999999999999998)

let modRemainder = mod.1
print("modRemainder: ", modRemainder) // 0.2999999999999998

标签: iosswiftdoublefractions

解决方案


推荐阅读