|
假如需要返回的有效数字的个数为5
如果“模拟值”为整数,例如500的话,按书中所讲的公式,所得的舍入结果并不是保留5位有效数字的结果:500.00,而始终是500。(这也许是单元格格式始终的“常规”格式的缘故)
我自己编写了一个公式,解决了上述问题:(见附件)
公式的总体思路是:
(1)、源数据如果是整数,假设为X,利用Trunc函数和Len函数取得X的长度“Len(Trunc(X))”,然后获得小数点后面的位数“有效数字的个数-len(X)”,最后利用Text函数格式化源数据“Text(X, "0."&Rept(有效数字的个数-len(X),0)”。
(2)、源数据如果是非整数,且<1,则利用Round函数四舍五入“Round(X,有效数字的个数)”。
(3)、源数据如果是非整数,且>1,则利用Trunc函数和Len函数取得整数部分的长度,再用需要保留的有效数字的个数减去整数部分的长度,获得需要保留的小数点后面的位数,再利用Round函数按照该小数点后面的位数进行四舍五入。
(4)、利用If(Mod(X,1)=0,第一种情况,(if(X<1,第二种情况,第三种情况)))将上述的三种情况的公式结合起来
也许本人编写的公式过于复杂,想请教版主有没有更好的解决该问题的方法,希望在改版时给予改进,谢谢!
[ 本帖最后由 zhangyi1986 于 2008-12-6 19:27 编辑 ] |
|