gpt4 book ai didi

ios - Swift % 计算不正确

转载 作者:搜寻专家 更新时间:2023-11-01 06:07:07 27 4
gpt4 key购买 nike

我有代码检查变量 elapsedTime (double) 是否是 0.4 的倍数。即 0.4、.0.8、1.2、1.6 等代码检查如下:

    let roundedInterval = Double(round(timeInterval*10)/10) //(this is 0.4)
let roundedActualElapsedTime = Double(round(actualElapsedTime*10)/10)

if roundedActualElapsedTime%roundedInterval == 0 {

print(“is a multiple of 0.4”)
}

然而,根据我的结果输出 0.4、0.8、1.6、3.2 被报告为倍数,因此它缺少值。知道我在这里可能做错了什么吗?

注意:roundedTimeInterval 保持在 0.4 不变,roundedActualElapsedTime 以 0.1s 递增,即 0.1、0.2、0.3、0.4...等

最佳答案

FloatDouble% 运算符可能会在 Swift 3.0 中被删除,所以你不应该依赖它。参见 this swift-evolution thread供讨论。

此外,您还需要学习更多有关 float 的知识。 float (在所有 Apple 平台上实现)只能表示 m * 2e 形式的数字,其中 m 和 e 是整数(并且可能为负数) .只能精确表示2的幂的整数倍(包括1/2、1/4、1/8等负幂),0.1、0.2、0.3等数不是任何幂的整数倍二。 (请注意,0.5 是 2 的幂的整数倍:它是 2-1。)

因此,当您取 round(timeInterval * 10) 并将其除以 10 时,您通常会得到一个不精确的结果,并且通常您不应该期望两个不精确结果的余数是精确的零。

您可能想要做的是将十分之一秒(秒的十分之一)作为整数处理,因为那时您正在处理精确的数字:

let roundedTenths = Int(round(timeInterval*10))
let roundedElapsedTenths = Int(round(actualElapsedTime * 10))
if roundedElapsedTenths % roundedTenths == 0 {
print("is a multiple of 0.4")
}

关于ios - Swift % 计算不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34759596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com