NET Web报表中精度要求较高的小数计算如何实现
有很多报表中的小数计算(浮点运算)精度要求比较高。比如金融行业的报表中,对于 (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 数据,不会有任何误差。
引自:.NET报表知识库
原文链接:.NET Web报表中精度要求较高的小数计算如何实现
相关文章:类Excel设计器的基本标准 ; 报表工具制表能力的探讨 ; 谈谈行式填报 ; 多源关联分片介绍
其他相关内容:免费的web报表开发工具 ; RAQSOFT ; 用多源关联分片设计.NET报表 ;web报表研究 ;专业.net报表工具
补充:.NET技术 , 图表区