gpt4 book ai didi

swift - 使 Int 舍入到最接近的值

转载 作者:可可西里 更新时间:2023-10-31 23:56:25 25 4
gpt4 key购买 nike

我有两个 Int 值(它们必须是 Ints),我希望它们在方程式中四舍五入到最接近的值;

var Example = Int()
var secondExample = Int()

Example = (secondExample / 7000)

此等式使变量 Example 始终向下舍入到最低值。例如说数字如下;

var Example = Int()
var secondExample : Int = 20000

Example = (20000 / 7000)

20000/7000 等于 2.857...但是变量 Example 显示 2

如何使 Example 四舍五入到最接近的数字而不将其更改为 Double

最佳答案

对于非负整数,下面的函数给出纯整数算术所需的结果:

func divideAndRound(numerator: Int, _ denominator: Int) -> Int {
return (2 * numerator + denominator)/(2 * denominator)
}

例子:

print(20000.0/7000.0) // 2.85714285714286
print(divideAndRound(20000, 7000)) // 3 (rounded up)

print(10000.0/7000.0) // 1.42857142857143
print(divideAndRound(10000, 7000)) // 1 (rounded down)

思路是

 a   1   2 * a + b
- + - = ---------
b 2 2 * b

这是任意签名的可能实现也不会溢出的整数:

func divideAndRound(num: Int, _ den: Int) -> Int {
return num / den + (num % den) / (den / 2 + den % 2)
}

(基于@user3441734更新的解决方案,所以我们有一个引用现在在我们的答案之间循环:)

还有一个ldiv计算商的函数和除法的余数,所以最后一个函数也可以是实现为

func divideAndRound(num: Int, _ den: Int) -> Int {
let div = ldiv(num, den)
let div2 = ldiv(den, 2)
return div.quot + div.rem / (div2.quot + div2.rem)
}

(我没有测试哪个版本更快。)

关于swift - 使 Int 舍入到最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com