谷歌电子表格 - 下调0.5,但高于该水平

时间:2013-05-23 03:16:27

标签: excel google-sheets

常规“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)

6 个答案:

答案 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 ^^^^^ 希望对您有所帮助:)