首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谷歌电子表格

谷歌电子表格
EN

Stack Overflow用户
提问于 2013-05-23 03:16:27
回答 6查看 18.2K关注 0票数 2

规则的“圆形”函数将在< 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)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-23 05:15:57

可以创建执行此=IF(A1-int(A1)>0.5,int(A1)+1,int(A1))的IF语句。

但是接缝一个奇怪的要求,正常的惯例(在西方)是把.5圈起来,而不是降低。

票数 4
EN

Stack Overflow用户

发布于 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)

票数 2
EN

Stack Overflow用户

发布于 2016-02-10 11:54:37

警告:这个已被信任的“解决方案”有一个错误:

代码语言:javascript
运行
复制
=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

插入.1、.2、.3、.4或负值,以查看意外结果。我提出的解决办法是:

代码语言:javascript
运行
复制
=ROUNDUP(MAX(ABS(B1)-1/2,0))*SIGN(B1)

所以我使用了Jayen的巧妙公式,但是用MAX和ABS一起消除了这个错误,然后乘以这个符号,让它可以处理正负数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16705085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档