Swift如何获取十进制数向上取整后的10的倍数?
如何在Swift中获取十进制数向上取整后的10的倍数?
嘿,这个需求其实很好实现,核心思路就是把问题拆解成「先向上取整到整数,再还原回10的倍数」,我给你准备了不同场景下的解决方案:
基础浮点数方案(Double类型)
如果你的数值是Double类型,直接用ceil函数就能搞定,步骤超简单:
- 把数值除以10,将问题转化为「向上取整到最近整数」
- 用
ceil取到大于等于该值的最小整数 - 再乘以10,还原回10的倍数
具体代码如下:
import Foundation func roundUpToNearestTen(_ number: Double) -> Double { return ceil(number / 10) * 10 }
我们来验证你给出的所有例子,结果完全符合预期:
print(roundUpToNearestTen(1.20)) // 10.0 print(roundUpToNearestTen(1.90)) // 10.0 print(roundUpToNearestTen(5.50)) // 10.0 print(roundUpToNearestTen(20.30)) // 30.0 print(roundUpToNearestTen(25.50)) // 30.0 print(roundUpToNearestTen(29.00)) // 30.0 print(roundUpToNearestTen(90.0)) // 90.0 print(roundUpToNearestTen(90.1)) // 100.0 print(roundUpToNearestTen(95.50)) // 100.0 print(roundUpToNearestTen(99.01)) // 100.0 print(roundUpToNearestTen(120.0)) // 120.0 print(roundUpToNearestTen(121.1)) // 130.0 print(roundUpToNearestTen(129.5)) // 130.0
整数类型方案(Int)
如果你的数值是整数类型,只需要先转换成Double处理,再转回Int就行:
func roundUpToNearestTen(_ number: Int) -> Int { return Int(ceil(Double(number) / 10)) * 10 } // 测试示例: print(roundUpToNearestTen(29)) // 30 print(roundUpToNearestTen(90)) // 90 print(roundUpToNearestTen(91)) // 100
精确十进制方案(Decimal类型)
如果需要处理精确的十进制计算(比如金额场景,避免浮点数精度误差),可以用Decimal类型来实现:
import Foundation func roundUpToNearestTen(_ number: Decimal) -> Decimal { let divisor = Decimal(10) let dividedValue = number / divisor let ceiledValue = dividedValue.rounded(.up) return ceiledValue * divisor } // 测试示例: print(roundUpToNearestTen(Decimal(string: "1.20")!)) // 10 print(roundUpToNearestTen(Decimal(string: "90.1")!)) // 100
这样不管你是处理普通浮点数、整数还是需要精确计算的场景,都能完美满足需求啦!
内容的提问来源于stack exchange,提问作者Sameera Chandimal
相关产品推荐
相关产品推荐

