我正在尝试制作一个增长率(Double)计算器,将结果四舍五入到最接近的整数并从那里重新计算,如下所示:
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必须成为变量并在整个程序中进行更改(以便进行下一次计算),我不希望这种情况发生。
firstUsers
库中有一个round可用项 (实际上在中 ,但是 在 大多数情况下您需要使用 导入 而不是 直接 使用 ) 。Foundation Darwin``Foundation``Darwin``Foundation``Darwin
round
Foundation
Darwin``Foundation``Darwin``Foundation``Darwin
import Foundation users = round(users)
在操场上运行代码,然后调用:
print(round(users))
输出:
15.0
round()始终向上舍当小数位>= .5和向下时,它的< .5(标准取整)。您可以使用floor()强制舍入和ceil()强制舍入。
round()
>= .5
< .5
floor()
ceil()
如果您需要一轮一个特定的地方,那么你乘pow(10.0, number of places),round,然后除以pow(10, number of places):
pow(10.0, number of places)
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可能并不总是完全准确的。最好将其视为四舍五入的近似值。如果出于显示目的而执行此操作,则最好使用字符串格式设置数字格式,而不要使用数学取整。
rounded