let num = 32.0
Double(num).remainder(dividingBy: 12.0)
我得到的是-4?..而不是8.0 ...它是从8.0中减去12.0
我该如何解决?
答案 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
。