当前位置: 首页 > 面试题库 >

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

司徒俊良
2023-03-14
问题内容

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


问题答案:

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



 类似资料:
  • 问题内容: 我想将a舍入到最接近的10的倍数。 例如,如果数字为8.0,则四舍五入为10。如果数字为2.0,则将其四舍五入为0。 我怎样才能做到这一点? 问题答案: 您可以使用函数(将浮点数四舍五入到最接近的整数值)并应用“比例因子” 10: 用法示例: 在第二个示例中,除以十(),四舍五入(),转换为整数(),然后再乘以10()。 斯威夫特3: 或者:

  • 问题内容: 我正在尝试在python中舍入整数。我看了内置的round()函数,但似乎舍入浮动了。 我的目标是将整数四舍五入到最接近的10的倍数。即:5-> 10、4-> 0、95-> 100,等等。 5和更高的值应四舍五入,4和更低的值应四舍五入。 这是我这样做的代码: 这是实现我想要实现的最好方法吗?有内置的功能吗?另外,如果这是最好的方法,那么我在测试中遗漏的代码是否有问题? 问题答案: 实

  • 问题内容: 我可以在python中进行以下舍入: 四舍五入到最接近的05小数 7,97-> 7,95 6,72-> 6,70 31,06-> 31,05 36,04-> 36,05 5,25-> 5,25 希望有道理。 问题答案:

  • 问题内容: 我们如何在php中将数字四舍五入到最接近的10? 说我有,我将使用什么代码将其四舍五入? 问题答案: 会下降。 会上升。 默认情况下会最接近。 除以10,得到ceil,然后乘以10以减少有效数字。 编辑:我已经这样做了很长时间..但是TallGreenTree的答案是更干净。

  • 问题内容: 我试图弄清楚如何将货币金额向上舍入至最接近的5美分。以下显示了我的预期结果 我需要结果的精度为2(如上所示)。 更新资料 按照下面的建议,我能做的就是 我不认为这是100%的原始数据-我担心在转换为双精度和从双精度转换时精度可能会丢失。但是,这是到目前为止我能想到的最好的方法,并且 似乎 可以解决。 问题答案: 您可以使用普通双精度来做到这一点。 编辑:对于负数,您需要减去0.5

  • 问题内容: 我一直试图舍入长浮点数,例如: 到目前为止没有成功。我想,(尽管这或圆形上下,这是不是我要找的)和它没有任何工作(还是浮点数)。 我能做什么? 编辑:代码: 问题答案: int(round(x)) 将其舍入并将其更改为整数 编辑: 您没有将int(round(h))分配给任何变量。当您调用int(round(h))时,它返回整数,但不执行其他任何操作。您必须将该行更改为: 将新值分配给