【问题标题】:Google Spreadsheet - Round down at 0.5, but round up above thatGoogle 电子表格 - 向下取整为 0.5,但向上取整
【发布时间】:2013-05-23 03:16:27
【问题描述】:

常规的“ROUND”函数在= 0.5时向上舍入

我需要将 0.5 向下舍入,但任何高于该值的都需要向上舍入。

所以:
10.4 应该是 10
10.5 应该是 10
10.6 应该是 11

编辑:这是我想出的解决方案

如果要四舍五入的值在B1中
并且小数精度在 A1 中(0 = 无小数,1 = 一位小数等)
=IF(MOD(ABS(B1),(1/(10^A1)))<=0.5*(1/(10^A1)),ROUNDDOWN(B1,A1),ROUNDUP(B1,A1))

ABS() 确保它适用于负数。
(1/(10^A1)) 确保我的精度(这是 Google 舍入函数的第二个参数)相应地缩放我的边界条件 (0.5)。
MOD() 实际上决定了我的边界条件。

编辑2:

感谢@Jayen,提供更优雅的解决方案

=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

【问题讨论】:

  • Jayen 的“更优雅”的解决方案有一个错误。用 .2 试试,你会得到 1 而不是 0! -.2 也产生 -1 而不是 0。零会产生 0。但是 0 到 .5 之间的任何数字都会产生 1 而不是 0。人们确实需要更彻底地测试。

标签: excel google-sheets


【解决方案1】:

可以创建一个 IF 语句来执行此操作=IF(A1-int(A1)>0.5,int(A1)+1,int(A1))

但是接缝了一个奇怪的要求,正常的惯例(在西方)是向上舍入 0.5,而不是向下舍入。

【讨论】:

  • 这是一个适合 EvE-Online 的工具(如果敲响了警钟的话)。谁知道为什么那场比赛使用四舍五入的方法,但确实如此。我会接受这个答案,因为我最终使用了 IF 语句(但是不同)
  • xero 似乎让我的薪水少了半美分 :(
【解决方案2】:

警告:这个著名的“解决方案”有一个错误:

=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

插入 .1、.2、.3、.4 或负值以查看意外结果。我采用的解决方案是:

=ROUNDUP(MAX(ABS(B1)-1/2,0))*SIGN(B1)

所以我使用了 Jayen 的聪明公式,但使用 MAX 和 ABS 来消除错误,然后乘以 SIGN 以使其适用于正数和负数。

【讨论】:

    【解决方案3】:

    我正在创建C1 = (10 ^ -A1) / 2,如果您舍入到 0 位小数,则为 0.5,如果您舍入到 1,则为 0.05,等等。

    那么就很简单了:

    =ROUNDUP(B1 - C1, A1)

    或替代:

    =ROUNDUP(B1 - (10 ^ -A1) / 2, A1)

    编辑:

    不确定是否希望负半数接近或远离 0,但这可以吗?

    =ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

    这将在半场向 0 舍入。

    EDIT2:

    但如果您希望负半数从 0 舍入(所有半数都向负无穷大舍入):

    =CEILING(B1 - 10 ^ -A1 / 2, 10 ^ -A1)

    EDIT3:

    @ShawnKovac 在 B1

    =ROUNDUP(MAX(ABS(B1) - 10 ^ -A1 / 2, 0), A1) * SIGN(B1)

    当 B1

    =CEILING(B1 - 10 ^ -A1 / 2, SIGN(B1 - 10 ^ -A1 / 2) * 10 ^ -A1)

    【讨论】:

    • 更优雅,但它不适用于负数。在精度0 和舍入值为-10.60 时,结果为-12.00
    • Roundup 从零舍入而不是从正数舍入?埃加兹!
    • 很好用。更改已接受的答案是不公平的,因为 在 2 年前当我需要它时帮助了我,但我会给你一个更优雅的解决方案的赏金。需要等待 23 小时,如果我忘记了,请 ping 我。
    • ROUNDUP function 远离零CEILING function 向数字更大的数字舍入。问两个数学家 -2 是否大于 比 -1,你会得到六个答案。
    • 感谢@Jeeped 我更新了我的答案,以防 Slav 想要四舍五入到一个数字更小的数字而不是 0。
    【解决方案4】:

    根据数据集,您可以从您的值中减去,只要您知道这样做不会使您的数字无效。

     =round(A1 - 0.00001)
    

    【讨论】:

    • 不幸的是,它会使某些计算无效
    【解决方案5】:

    =IF(AND(LEN(MOD(A2,1)>4),RIGHT(A2,1)="5"),ROUNDDOWN(A2,2),ROUND(A2,2))

    mod 1 将只留下 0. 和小数位。因此,如果 3 个小数位并且您想四舍五入到 2,并且小数的长度大于 4(“0.”加上小数),这表明小数需要四舍五入。如果小数的最后一位是 5,则使用舍入功能,否则使用舍入。

    【讨论】:

      【解决方案6】:

      好吧,如果你只是减去 0.1,它将适用于正数,但如果你使用负数,你可以使用如果 A1 低于 0,则添加 0.1 IF(A1

      A Table to show the result of the formula above ^^^^^ 希望它有所帮助:)

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 2016-01-11
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        • 2015-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多