1、常见取余方法
1、整数取余运算符 %
适用类型:Int 类型。
作用:计算整数除法的余数。
符号规则:与除数(右操作数)的符号一致。
示例:
let intRemainder = 10 % 3 // 输出: 1
let negativeRemainder = -10 % 3 // 输出: -1
2、truncatingRemainder(dividingBy:)
适用类型:Double 和 Float。
作用:浮点数除法的余数。
符号规则:与被除数(左操作数)的符号一致。
示例:
let remainder = 7.5.truncatingRemainder(dividingBy: 2.0) // 输出: 1.5
2、模运算相关
1、remainder(dividingBy:)
适用类型:Double 和 Float。
作用:返回两个浮点数相除的数学模(modulo)。
示例:
let remainder1 = 7.5.remainder(dividingBy: 2.0) // 输出: -0.5
let remainder2 = -7.5.remainder(dividingBy: 2.0) // 输出: 0.5
计算过程
1、7.5 ÷ 2.0 = 3.75 ,最接近的整数商是 4。
余数: 7.5 – 2.0 × 4 = 7.5 – 8 = -0.5 。
2、-7.5 ÷ 2.0 = -3.75 ,最接近的整数商是 -4。
余数: -7.5 – 2.0 × (-4) = -7.5 + 8 = 0.5 。
3、与整数或小数相关的方法
1、floor
作用:返回小于等于当前值的最大整数。
示例:
let floorValue = floor(7.8) // 输出: 7.0
let floorNegative = floor(-7.8) // 输出: -8.0
2、ceil
作用:返回大于等于当前值的最小整数。
示例:
let ceilValue = ceil(7.8) // 输出: 8.0
let ceilNegative = ceil(-7.8) // 输出: -7.0
3、round
作用:返回最接近的整数,如果值正好在两者之间,选择靠近 0 的值。
示例:
let roundValue = round(7.5) // 输出: 8.0
let roundNegative = round(-7.5) // 输出: -8.0
4、rounded
作用:将一个浮点数取整到离 0 最近的整数。
示例:
let positiveNumber: Double = 3.7
let negativeNumber: Double = -3.7
print(positiveNumber.rounded(.towardZero)) // 输出 3
print(negativeNumber.rounded(.towardZero)) // 输出 -3
4、其他辅助方法
1、modf(_:)
作用:分解浮点数,返回整数部分和小数部分的元组 (整数部分, 小数部分)。
示例:
let number = 7.8
let (integerPart, fractionalPart) = modf(number)
print(integerPart) // 输出: 7.0
print(fractionalPart) // 输出: 0.7999999999999998
注:出现 0.7999999999999998 的现象是因为浮点数精度问题,这是计算机中表示和操作小数时常见的限制。
如果仅用于显示,可以限制小数位数:
print(String(format: "%.1f", fractionalPart)) // 输出: 0.8
2、abs(_:)
作用:返回绝对值,适用于整数和浮点数。
示例:
let absoluteValue = abs(-7.5) // 输出: 7.5
3、clamp(手动实现)
Swift 没有内置 clamp,但可以通过扩展实现一个,用于将值限定在某个区间。
extension Comparable {
func clamped(to limits: ClosedRange<Self>) -> Self {
min(max(self, limits.lowerBound), limits.upperBound)
}
}
let clampedValue = (-10.0).clamped(to: 0...100) // 输出: 0.0
4、isMultiple(of:)
作用:用于判断一个整数是否是另一个整数的倍数。它是 Int 和其他整数类型的实例方法,返回一个布尔值 (true 或 false)。
示例:
let number = 12
print(number.isMultiple(of: 3)) // true,因为 12 是 3 的倍数
print(number.isMultiple(of: 5)) // false,因为 12 不是 5 的倍数
print(number.isMultiple(of: 1)) // true,所有整数都是 1 的倍数
print(number.isMultiple(of: 12)) // true,12 是自己的倍数
总结
1、整数取余 %:整数取余,结果为整数。
2、truncatingRemainder(dividingBy:):浮点数取余,符号与被除数一致。
3、remainder(dividingBy:):浮点数取模。
4、floor:向下取整。
5、ceil:向上取整。
6、round:四舍五入。
7、modf:分解整数和小数部分。
8、abs:取绝对值。
9、clamp:限制区间。
这些方法常用于数值计算、动画控制和循环逻辑。根据需求选择合适的工具,可以提高代码的简洁性和效率。