一尘不染

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

swift

我正在尝试制作一个增长率(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必须成为变量并在整个程序中进行更改(以便进行下一次计算),我不希望这种情况发生。


阅读 287

收藏
2020-07-07

共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可能并不总是完全准确的。最好将其视为四舍五入的近似值。如果出于显示目的而执行此操作,则最好使用字符串格式设置数字格式,而不要使用数学取整。

2020-07-07