Swift Double.remainder(dividingBy:) 返回负值

caa*_*042 1 negative-number modulus swift

let num = 32.0
Double(num).remainder(dividingBy: 12.0)
Run Code Online (Sandbox Code Playgroud)

我得到 -4?...而不是 8.0...它从 8.0 中减去 12.0

我该如何解决?

Sul*_*han 5

请仔细阅读文档

对于两个有限值 x 和 y,x 除以 y 的余数 r 满足 x == y * q + r,其中 q 是最接近x / y的整数。如果 x / y 正好位于两个整数的中间,则选择 q 为偶数。请注意,q 不是在浮点算术中计算的 x / y,并且 q 可能无法用任何可用的整数类型表示。

(强调我的)

你想使用truncatingRemainder(dividingBy:)代替:

let num = 32.0
let value = Double(num)
    .truncatingRemainder(dividingBy: 12)
print(value) // 8
Run Code Online (Sandbox Code Playgroud)