【回复贴】一言难尽的Round(关于Round的运算机制的测试)

一言难尽的Round https://bbs.wps.cn/topic/31968

示例中C3:C10的Round对B3:B10中的末位数5时舍时入,确实很让人迷惑,为验证这个问题作了以下关于Round的测试:

在A列输入数字,B列计算小数位数,C列是用1减A列的结果,这个结果似乎很正常。

然后对C列计算了一下小数位数:

发现了一些不寻常的情况,D5:D8的小数竟然到了17和19位(肯定是浮点运算惹的祸,没办法,谁让现在的计算机是2进制呢,2进制是没办法完全精确的表示小数的,等将来有十进制的计算机也许就不会这样了)。

多提取一位小数看看是什么状况:

原来C5显示的0.0015其实是0.00149......舍入的结果,并非真的是0.0015。

对末位Round一下:

这回F5得到的是真正的0.0015。

用这个结果再对末位Round一下:

这回达到预期的效果了。

结果就是,想保留3位小数,你得有个精确的4位小数,要得到精确的4位小数,就是对第5位小数Round,于是就变成这样:Round( Round( ... , 4 ) , 3 )

所以对1-0.9985进行保留3位的舍入的精确公式是:

=ROUND(ROUND(1-0.9985,4),3)

内层的Round( ... , 4 )是对第5位小数的 或舍或入

然后对这个得出的有4位小数的结果Round( ... , 3 )就可以了。

测试证明Round函数只对第2参数后面的1位小数进行 舍|入,多余的小数位全部舍弃。

河南省
浏览 308
收藏
2
分享
2 +1
6
+1
全部评论 6
 
懒得批爆
懒得批爆

创作者俱乐部成员

这是设计规范【IEEE 754】的问题,详情参考https://bbs.wps.cn/topic/31996?chan=share&fromshare=copylink
· 四川省
回复
懒得批爆
懒得批爆

创作者俱乐部成员

有成熟的方案,为什么要摸索 科研院校
· 四川省
回复
 
flavor
我遇到过同样的表格WPS 和OFFICE打开计算的结果不一样。。。
· 重庆
回复
 
小小
每个字都认识,连在一起就看不懂
· 广东省
回复
 
wps新路
wps新路

WPS函数专家

详细 ,,我就没这么详尽的表达能力。强👍
· 重庆
回复