当前位置: 首页 > 知识库问答 >
问题:

使Int四舍五入到最接近的值

蒋承教
2023-03-14

我有两个Int值(它们必须是Int ),当在一个等式中时,我希望它们四舍五入到最近的值;

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

Example = (secondExample / 7000)

此等式使变量示例始终四舍五入到最小值。例如,数字如下所示;

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

Example = (20000 / 7000)

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

如何使示例四舍五入到最接近的数字而不将其更改为双精度

共有2个答案

荆哲
2023-03-14

看看马丁的回答!他的想法很好,所以我扩展了他的负数解

func divideAndRound(n: Int, _ d: Int) -> Int {
    let sn = n < 0 ? -1 : 1
    let sd = d < 0 ? -1 : 1
    let s = sn * sd
    let n = n * sn
    let d = d * sd
    return (2 * n + d)/(2 * d) * s
}

divideAndRound(1, 2) // 1
divideAndRound(1, 3) // 0
divideAndRound(-1, 2) // -1
divideAndRound(-1, 3) // 0
divideAndRound(1, -2) // -1
divideAndRound(1, -3) // 0

唯一的麻烦是(2*n d)可能会溢出并且代码会崩溃。

更新!借助儿童数学

func divr(a: Int, _ b: Int)->Int {
    return (a % b) * 2 / b  + a / b
}

它应该适用于除0分母之外的任何Int:-)。

鲁鹤轩
2023-03-14

对于非负整数,以下函数在纯整数运算中给出所需结果:

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)
}

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

 类似资料:
  • 问题内容: 我有两个Int值(它们必须是Ints),我希望它们在方程式中四舍五入到最接近的值; 该方程使变量始终向下舍入到最小值。例如,以下数字表示; 20000/7000等于2.857 …但是变量显示。 我如何舍入到最接近的数字 而不将其更改为Double 问题答案: 对于 非负 整数,以下函数以纯整数算术给出所需的结果: 例子: 这个想法是 这是任意签名的整数的一种可能实现,该整数也不会溢出:

  • 问题内容: 我来到了Java程序的一部分,我需要四舍五入到最接近的百位数,并认为可能有某种方法可以做到这一点,但我想没有。因此,我在网上搜索了示例或任何答案,但由于所有示例看起来都接近最接近的一百,因此至今仍未找到任何答案。我只想这样做并向上取整。也许有一些我忽略的简单解决方案。我已经尝试了其他功能,但到目前为止还没有找到答案。如果有人可以帮助我解决这个问题,我将不胜感激。 如果我的电话号码是20

  • 问题内容: 我试图找到一种方法将值四舍五入到最接近的0.05。例如: 0.93四舍五入为0.95 0.81四舍五入为0.80 0.65停留0.65 0.68至0.70 0.67至0.65 用Java有没有简单的方法可以做到这一点? 问题答案: 一种选择如下: 将该值乘以20。 使用进行四舍五入为最接近的整数。 再除以20。 例如: 希望这可以帮助!

  • 问题内容: 我想要一个用52调用时返回55的php函数。 我已经尝试过该功能: 它返回 90, 但我要 95 。 谢谢。 问题答案: 这可以通过多种方式来完成,具体取决于您的首选舍入约定: 1.四舍五入到5 的 下一个 倍数,不包括当前数字 行为:50个输出55,52个输出55 2.四舍五入到 最接近 的5的倍数,包括当前数字 行为:50个输出50、52个输出55、50.25个输出50 3.舍入到

  • 问题内容: 在Java中这怎么可能? 我有一个浮动货币,我想将其四舍五入到最接近的.5。 例如: 1.1应该四舍五入到1.0 1.3应该四舍五入到1.5 2.5应该四舍五入到2.5 3.223920应该四舍五入到3.0 编辑 :另外,我不只是想要字符串表示形式,还希望在此之后使用实际的float。 问题答案: @SamiKorhonen在评论中说: 乘以二,取整,最后除以二 所以这是代码: 输出:

  • 问题内容: 我需要以下结果 还是?我该怎么办? 问题答案: 您可以使用将小数位数减少为零。假设拥有要取整的值: 使用起来有点麻烦,因为它要求您指定要保留的位数。在您的示例中,该值为3,但这不适用于所有值: (请注意,对象是不可改变的,都和会返回一个新的对象。)