Swift替换浮点数的%符号:
func truncatingRemainder(dividingBy other: Self) -> Self
返回此值的余数除以给定值 截断分裂。
func remainder(dividingBy other: Self) -> Self
返回此值的余数除以给定值。
文档似乎并不十分清楚。它们之间的实际区别是什么,何时应该优先使用哪一个?感谢。
答案 0 :(得分:11)
truncatingRemainder
计算"截断的剩余部分
division"和remainder
计算"舍入除法的剩余部分"。
示例(来自API参考):
let x = 8.625
let y = 0.75
截断分区和剩余部分:
let q1 = (x/y).rounded(.towardZero)
let r1 = x.truncatingRemainder(dividingBy: y)
print(q1, r1) // 11.0 0.375
print(q1 * y + r1) // 8.625
舍入除法和剩余部分:
let q2 = (x/y).rounded(.toNearestOrEven)
let r2 = x.remainder(dividingBy: y)
print(q2, r2) // 12.0 -0.375
print(q2 * y + r2) // 8.625
因此,在任何情况下,rem
除x
之后y
的余数{/ 1}}
rem = x - quot * y
其中quot
是"圆形商" x
的{{1}}分部。
对于y
,truncatingRemainder
是商
舍入为零,对于quot
,remainder
是商
四舍五入到最接近的整数。
quot
的结果始终与符号相同
作为股息,truncatingRemainder
不需要这样。
如果remainder
和x
完全都可以表示为整数
y
与
相同x.truncatingRemainder(dividingBy: y)
使用整数余数运算符Int(x) % Int(y)
。
答案 1 :(得分:3)
这看起来像是...游乐场的工作!
let thing: Float = 8126.84652
let truncating = thing.truncatingRemainder(dividingBy: 10) // value is 6.84668, analog to %
let nonTruncating = thing.remainder(dividingBy: 10) // -3.15332
如您所见,允许普通余数为负数,(或者更确切地说,减去直到值为<= 0),而截断余数将保持为正。 (当值>> 0时停止)