谷歌电子表格 – 在0.5下降,但在上面

当<0.5时,常规的“ROUND”函数将向下舍入,当> = 0.5时舍入

我需要0.5被舍入,但是高于这个值的任何东西都会被舍入。

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

编辑:这是我想出的解决scheme

如果要舍入的值在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()实际上决定了我的边界条件。

EDIT2:

更加优雅的解决scheme归功于@Jayen

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

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

但是接到一个奇怪的要求,正常的约定(在西方)是向上,不向下。

警告:这个信用的“解决scheme”有一个错误:

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

插入.1,.2,.3,.4或这些值的负值以查看意外的结果。 我的解决scheme是:

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

所以我使用了Jayen的聪明的公式,但是使用了MAX和ABS来消除这个bug,然后乘以SIGN使它能够用于正数和负数。

我正在创buildC1 = (10 ^ -A1) / 2 ,如果您四舍五入到小数点后0位,则为0.5,如果您四舍五入为1,则为0.05。

那简直就是:

=ROUNDUP(B1 - C1, A1)

或者,replace:

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

编辑:

不知道如果你想要负半边来回或0,但这是好吗?

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

这将在一半左右四舍五入。

EDIT2:

但是如果你想要负半个数字从0(所有的半数都是负的无穷大)都舍去的话:

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

EDIT3:

@ShawnKovac在B1 <C1的时候发现了一个与我原来的答案有关的问题,所以我已经把它改编成了A1:

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

另外我的回答是在B1 <C1时向负无穷的方向舍去,所以这是一个更新:

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

根据数据集的不同,只要从数值中减去数值,只要知道这些数据都不会失效即可。

  =round(A1 - 0.00001) 

= 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,则使用舍入function,否则使用舍入。