我试图使一个计算器的增长率(双),将结果四舍五入到最近的整数,并从那里重新计算,如:

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必须成为一个变量,并在整个程序中改变(为了进行下一次计算),这是我不希望发生的。


当前回答

要四舍五入到最接近的整数,只需使用round()。

var x = 3.7
x.round() // x = 4.0

如果你不想修改原始值,那么使用surround ():

let x = 3.7
let y = x.rounded() // y = 4.0. x = 3.7

正如人们可能预料的那样,像3.5这样的数字是四舍五入的,而像-3.5这样的数字是四舍五入的。如果您需要不同的舍入行为,您可以使用其中一个舍入规则。例如:

var x = 3.7
x.round(.towardZero) // 3.0

如果你需要一个实际的Int,那么就把它转换为1(但只有当你确定Double不会大于Int.max时):

let myInt = Int(myDouble.rounded())

笔记

这个答案完全改写了。我以前的答案涉及到C数学函数,如round, lround, floor和ceiling。然而,现在Swift已经内置了这个功能,我不能再推荐使用这些功能了。感谢@dfri为我指出这一点。点击这里查看@dfri的精彩回答。我还对CGFloat进行了类似的舍入。

其他回答

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

import Foundation

users = round(users)

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

print(round(users))

输出:

15.0

Round()总是在小数点后>= .5时向上舍入,在< .5时向下舍入(标准舍入)。可以使用floor()强制向下舍入,使用ceil()强制向上舍入。

如果你需要四舍五入到一个特定的位置,那么你乘以pow(10.0,位数),四舍五入,然后除以pow(10,位数):

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

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

输出:

10.12

注意:由于浮点数学的工作方式,四舍五入可能并不总是完全准确。最好把它看作是四舍五入的近似。如果这样做是为了显示,最好使用字符串格式来格式化数字,而不是使用数学来四舍五入。

这是我想到的最简单的方法

let weightValue = 143.69
print("Rounded off weight value = \(Int(weightValue))")

替代方法:

print("Rounded off weight value = \((String(format: "%.0f", sender.value)))")

一个非常简单的解决方案对我很有效:

  if (62 % 50 != 0) {
      var number = 62 / 50 + 1 // adding 1 is doing the actual "round up"
  }

数字包含值2

要四舍五入到最接近的整数,只需使用round()。

var x = 3.7
x.round() // x = 4.0

如果你不想修改原始值,那么使用surround ():

let x = 3.7
let y = x.rounded() // y = 4.0. x = 3.7

正如人们可能预料的那样,像3.5这样的数字是四舍五入的,而像-3.5这样的数字是四舍五入的。如果您需要不同的舍入行为,您可以使用其中一个舍入规则。例如:

var x = 3.7
x.round(.towardZero) // 3.0

如果你需要一个实际的Int,那么就把它转换为1(但只有当你确定Double不会大于Int.max时):

let myInt = Int(myDouble.rounded())

笔记

这个答案完全改写了。我以前的答案涉及到C数学函数,如round, lround, floor和ceiling。然而,现在Swift已经内置了这个功能,我不能再推荐使用这些功能了。感谢@dfri为我指出这一点。点击这里查看@dfri的精彩回答。我还对CGFloat进行了类似的舍入。

斯威夫特3: 如果你想四舍五入到某个数字,例如5.678434 -> 5.68,你可以将round()或roundf()函数与乘法组合:

let value:Float = 5.678434
let roundedValue = roundf(value * 100) / 100
print(roundedValue) //5.68