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

时间:2018-09-24 20:02:32

标签: swift modulus negative-number

let num = 32.0
Double(num).remainder(dividingBy: 12.0)

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

我该如何解决?

2 个答案:

答案 0 :(得分:3)

请仔细阅读documentation

  

对于两个有限值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

答案 1 :(得分:1)

remainder(dividingBy:)不是模函数。

在实部32.0/12.0 = 2.666666...中。 remainder(dividingBy:)函数将与该结果最接近的整数定义为q:在这种情况下为3。所以我们写:

32.O = q * 12 + r

q是整数,r是双精度数。

32.0 = 3 * 12.0 + r ⇒ r = - 4.0

此功能定义的其余r-4.0