Swift替换浮点数的%符号:
func truncatingRemainder(dividingBy other: Self) -> Self
Run Code Online (Sandbox Code Playgroud)
使用截断除法返回此值的余数除以给定值.
func remainder(dividingBy other: Self) -> Self
Run Code Online (Sandbox Code Playgroud)
返回此值的余数除以给定值.
文件似乎并不十分清楚.它们之间的实际区别是什么,何时应该优先使用哪一个?谢谢.
Mar*_*n R 11
truncatingRemainder计算"截断除法" remainder的余数,并计算"舍入除法"的余数.
示例(来自API参考):
let x = 8.625
let y = 0.75
Run Code Online (Sandbox Code Playgroud)
截断分区和余数:
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
Run Code Online (Sandbox Code Playgroud)
舍入除法和余数:
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
Run Code Online (Sandbox Code Playgroud)
因此,在任何情况下,剩余rem一师x由y是
rem = x - quot * y
Run Code Online (Sandbox Code Playgroud)
哪个quot是划分x的"圆形" y.
为truncatingRemainder,quot是向零舍入的商,以及remainder,quot朝向最接近的整数取整的商.
结果truncatingRemainder具有总是相同的标志
作为股息,这不是必须的情况remainder.
如果这两个x和y是完全相同作为一个整数,然后的结果表示的
x.truncatingRemainder(dividingBy: y)
Run Code Online (Sandbox Code Playgroud)
是相同的
Int(x) % Int(y)
Run Code Online (Sandbox Code Playgroud)
使用整数余数运算符%.
这看起来像是……游乐场的工作!
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,普通余数可以为负数(或者更确切地说,减去直到值 <=0),而截断余数将保持为正数。(当值 >=0 时停止)
| 归档时间: |
|
| 查看次数: |
4551 次 |
| 最近记录: |