报表知识库
我要提问

精度要求较高的小数计算如何实现

润乾报表实际应用当中,有很多报表中的小数计算(浮点运算)精度要求比较高。
比如金融行业的报表中,对于 (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 数据,不会有任何误差。

引自:润乾报表知识库
相关文章:润乾报表填报:可输入的下拉框润乾决策分析系统润乾报表多源回填:快速实现多库多表提交数据润乾报表出了新版统计图  ;定制填报提交的“确认”提示框
其他相关内容: 润乾商业智能解决方案商业智能BI联盟 ; Java报表 ; 润乾报表:动态改变填报更新数据的数据源 ;EXCEL和报表工具