我正在尝试制作一个增长率计算器(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