常规“ROUND”函数将在< 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))
确保我的精度(这是Google的舍入函数的第二个参数)相应地缩放我的边界条件(0.5
)。
而MOD()
实际上决定了我的边界条件。
编辑2:
感谢@Jayen提供更优雅的解决方案
=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)
答案 0 :(得分:3)
可以创建一个可以执行此操作的IF语句 =IF(A1-int(A1)>0.5,int(A1)+1,int(A1))
但接到一个奇怪的请求,正常的惯例(在西方)是圆的.5向上,而不是向下。
答案 1 :(得分:2)
我创建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&lt; C1,所以我已经采取了他的并适应任何A1:
=ROUNDUP(MAX(ABS(B1) - 10 ^ -A1 / 2, 0), A1) * SIGN(B1)
当B1 <&lt;
时,我向负无穷大四舍五入的答案会引发错误。 C1,所以这里有更新:
=CEILING(B1 - 10 ^ -A1 / 2, SIGN(B1 - 10 ^ -A1 / 2) * 10 ^ -A1)
答案 2 :(得分:2)
警告:此信用的解决方案&#39;有一个错误:
=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)
插入.1,.2,.3,.4或其中的负值以查看意外结果。我采用的解决方案是:
=ROUNDUP(MAX(ABS(B1)-1/2,0))*SIGN(B1)
所以我使用了Jayen的聪明公式,但是使用MAX和ABS消除了这个bug,然后乘以SIGN以使其适用于正数和负数。
答案 3 :(得分:0)
根据数据集的不同,您可以从您的值中减去,只要您知道这些数字都不会因此而失效。
=round(A1 - 0.00001)
答案 4 :(得分:0)
= 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,那么使用舍入功能,否则使用round。
答案 5 :(得分:0)
好吧,如果您只减去0.1,它将与正值一起使用,但是如果您使用负数,则可以使用A1小于0时加0.1 IF(A1 <0,ROUND(A1 + 0.1,0),ROUND(A1-0.1,0))
A Table to show the result of the formula above ^^^^^ 希望对您有所帮助:)