谷歌电子表格 – 在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,否则使用舍入。