Swift中的截断余数与余数

Swift中的截断余数与余数,swift,Swift,Swift将%符号替换为浮点数: 返回此值的剩余部分除以给定值,使用 截断除法 返回此值的剩余部分除以给定值 文件似乎不太清楚。它们之间的实际区别是什么?什么时候应该优先使用它们?谢谢。这看起来像是……操场的工作 let thing: Float = 8126.84652 let truncating = thing.truncatingRemainder(dividingBy: 10) // value is 6.84668, analog to % let nonTruncating

Swift将%符号替换为浮点数:


返回此值的剩余部分除以给定值,使用 截断除法


返回此值的剩余部分除以给定值



文件似乎不太清楚。它们之间的实际区别是什么?什么时候应该优先使用它们?谢谢。

这看起来像是……操场的工作

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)

计算“截断”的余数 除法”,并计算“舍入除法”的剩余部分

示例(来自API参考):

截断除法和余数:

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
四舍五入除法和余数:

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
因此,在任何情况下,由
y
划分的
x
的剩余
rem

rem = x - quot * y
其中
quot
x
除以
y
的“四舍五入商”

对于
截断余数
quot
是商 四舍五入到零,对于
余数
quot
是商 四舍五入到最接近的整数

截断余数的结果始终具有相同的符号
作为红利,
余数
不必如此

如果
x
y
都可以精确表示为整数 那么结果呢,

x.truncatingRemainder(dividingBy: y)

Int(x) % Int(y)

使用整数余数运算符
%

时,如果有人被此抛出,请注意:余数运算符,如%和truncatingrements,与模不同,它们对于负数是不同的。请参阅此处了解swift中的真正mod函数:truncatingrem余数并不总是返回正值。返回值与“thing”的符号相同
Int(x) % Int(y)