You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift如何获取十进制数向上取整后的10的倍数?

如何在Swift中获取十进制数向上取整后的10的倍数?

嘿,这个需求其实很好实现,核心思路就是把问题拆解成「先向上取整到整数,再还原回10的倍数」,我给你准备了不同场景下的解决方案:

基础浮点数方案(Double类型)

如果你的数值是Double类型,直接用ceil函数就能搞定,步骤超简单:

  1. 把数值除以10,将问题转化为「向上取整到最近整数」
  2. 用ceil取到大于等于该值的最小整数
  3. 再乘以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:20:35