欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

快逸报表:精度要求较高的小数计算怎么实现

更新时间: 2014-01-05 03:07:32 责任编辑: Author_N1

 

快逸报表:精度要求较高的小数计算如何实现
快逸报表实际应用当中,有很多报表中的小数计算(浮点运算)精度要求比较高。
比如金融行业的报表中,对于 (5588.4 + 288.4)* 0.7 这样的计算,要求结果不能使用四舍五入的方式。如果在单元格中直接写上” (5588.4 + 288.4)* 0.7 “,那么报表运行的结果是4113.75999 ,而手工计算的结果是 4113.76 。
那么怎么样把它变成真正的 4113.76 ,而且不能用四舍五入?


解决方案

快逸报表为了加快运算速度,会把直接敲入表达式的小数缺省当成双精度( double )类型处理,此时数据往往存在误差。比如: (5588.4 + 288.4)* 0.7 这样的写法,因为表达式里的三个数值 5588.4 、 288.4 、0.7 缺省变成了double ,用 double 计算的结果就是 4113.75999 。

因此,要使用精度转换函数 decimal() ,将数值转换成更高精度的 decimal 类型。写成: (decimal(’5588.4 ′ ) + decimal(’288.4 ′ ))* decimal(’0.7 ′ ) 即可解决这个问题。
那么,这里为什么不能写成 decimal(5588.4 ) 呢?这是 因为这样写的话, 5588.4 会被缺省当成 double 类型,再转成 decimal ,误差已经存在了,无法消除,必须应该写成: decimal(’5588.4′ ),此时加上引号的 5588.4 不会被当成 double ,直接从字符型转成 decimal ,才是真正的 decimal 数据,不会有任何误差。

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:07:32
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/18643/
本文WWW.DOC100.NET DOC100.NET版权所有。