2

常规的“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()负数。确保我的精度(这是 Google 舍入函数的第二个参数)相应地缩放我的边界条件 (
) 。 这实际上决定了我的边界条件。(1/(10^A1))0.5
MOD()

编辑2:

感谢@Jayen,提供更优雅的解决方案

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

4

6 回答 6

4

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

但是接缝一个奇怪的要求,正常的惯例(在西方)是向上舍入 0.5,而不是向下舍入。

于 2013-05-23T05:15:57.083 回答
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 舍入。

编辑2:

但是,如果您希望负半数从 0 舍入(所有半数都向负无穷大舍入):

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

编辑3:

@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)

于 2015-07-04T23:53:21.877 回答
2

警告:这个记入“解决方案”有一个错误:

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

插入 .1、.2、.3、.4 或负值以查看意外结果。我采用的解决方案是:

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

所以我使用了 Jayen 的聪明公式,但使用 MAX 和 ABS 来消除错误,然后乘以 SIGN 以使其适用于正数和负数。

于 2016-02-10T11:54:37.313 回答
0

根据数据集,您可以只从您的值中减去,只要您知道这样做不会使您的数字无效。

 =round(A1 - 0.00001)
于 2013-05-24T07:21:57.883 回答
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,则使用舍入功能,否则使用舍入。

于 2017-05-26T11:09:22.157 回答
0

好吧,如果您只是减去 0.1,它将适用于正数,但如果您使用负数,则可以使用如果 A1 低于 0 添加 0.1 IF(A1<0,ROUND(A1+0.1,0),ROUND(A1-0.1,0) )

显示上述公式结果的表格 ^^^^^ 希望对您有所帮助:)

于 2020-10-14T21:21:17.357 回答