小编典典

如何快速将 Double 舍入到最近的 Int?

all

我正在尝试制作一个增长率计算器(Double),它将结果四舍五入到最接近的整数并从那里重新计算,如下所示:

let firstUsers = 10.0
let growth = 0.1
var users = firstUsers
var week = 0


while users < 14 {
    println("week \(week) has \(users) users")
    users += users * growth
    week += 1
}

但到目前为止我一直做不到。

编辑 我有点这样做:

var firstUsers = 10.0
let growth = 0.1
var users:Int = Int(firstUsers)
var week = 0


while users <= 14 {
    println("week \(week) has \(users) users")
    firstUsers += firstUsers * growth
    users = Int(firstUsers)
    week += 1
}

虽然我不介意它总是四舍五入,但我不喜欢它,因为它firstUsers必须成为一个变量并在整个程序中发生变化(以便进行下一次计算),我不希望它发生。


阅读 65

收藏
2022-07-02

共1个答案

小编典典

库中有一个round可用的 (它实际上是在 中 ,但是是 导入 的,并且大多数时候你会想要使用 而不是 直接使用)
Foundation Darwin``Foundation``Darwin``Foundation``Darwin

import Foundation

users = round(users)

在操场上运行您的代码,然后调用:

print(round(users))

输出:

15.0

round()总是在小数位为时向上舍入,在小数位为时>= .5向下< .5舍入(标准舍入)。您可以使用floor()强制向下舍入和ceil()强制向上舍入。

如果您需要四舍五入到特定位置,则乘以pow(10.0, number of places), round,然后除以pow(10, number of places)

四舍五入到小数点后两位:

let numberOfPlaces = 2.0
let multiplier = pow(10.0, numberOfPlaces)
let num = 10.12345
let rounded = round(num * multiplier) / multiplier
print(rounded)

输出:

10.12

注意:
由于浮点数学的工作方式,rounded可能并不总是完全准确。最好将其更多地考虑为舍入的近似值。如果您这样做是为了显示,最好使用字符串格式来格式化数字,而不是使用数学来舍入它。

2022-07-02