规则的“圆形”函数将在< 0.5时舍入,而当>= 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))
确保了我的精度(这是谷歌的四舍五入函数的第二个参数)相应地缩放了我的边界条件(0.5
)。
MOD()
实际上决定了我的边界条件。
Edit2:
更优雅的解决方案感谢@Jayen
=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)
发布于 2013-05-23 05:15:57
可以创建执行此=IF(A1-int(A1)>0.5,int(A1)+1,int(A1))
的IF语句。
但是接缝一个奇怪的要求,正常的惯例(在西方)是把.5圈起来,而不是降低。
发布于 2015-07-04 23:53:21
我正在创建C1 = (10 ^ -A1) / 2
,如果你把小数点的四舍五入到0位,那么它是0.5,如果是1,则是0.0,等等。
然后简单地说:
=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 < 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)
发布于 2016-02-10 11:54:37
警告:这个已被信任的“解决方案”有一个错误:
=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)
插入.1、.2、.3、.4或负值,以查看意外结果。我提出的解决办法是:
=ROUNDUP(MAX(ABS(B1)-1/2,0))*SIGN(B1)
所以我使用了Jayen的巧妙公式,但是用MAX和ABS一起消除了这个错误,然后乘以这个符号,让它可以处理正负数。
https://stackoverflow.com/questions/16705085
复制相似问题