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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)