快逸报表实际应用当中,有很多报表中的小数计算(浮点运算)精度要求比较高。
比如金融行业的报表中,对于 (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 数据,不会有任何误差。
分享到:
相关推荐
51单片机:计算器(包含小数计算) ...备注:同普通实现小数计算程序不一样(浮点型数据计算存在精度丢失的情况),本程序全部采用整形进行计算,对小数点进行记录,最后显示再数码管上,保留有3位小数(可自行设置)
易语言汇编实现文本和双精度小数转换源码。@易语言资源网站。
五年级:数学教案-循环小数.pdf
易语言源码易语言汇编实现文本和双精度小数转换源码.rar 易语言源码易语言汇编实现文本和双精度小数转换源码.rar 易语言源码易语言汇编实现文本和双精度小数转换源码.rar 易语言源码易语言汇编实现文本和双精度...
教学设计:小数点位置移动引起小数大小的变化(变化规律).docx
js精度,js浮点数,js浮点数计算,js计算精度问题解决方案,js保留小数位,
处理多位小数的问题,文章:https://blog.csdn.net/yysyangyangyangshan/article/details/111991588
第四讲 高精度计算 由于计算机具有运算速度快,计算精度高的特点,许多过去由人来完成的烦琐、复杂的数学计算,现在都可以由计算机来代替,人可以从计算中解放出来,做更具有创造性的工作。 计算机计算结果的精度...
你是否因为JS端的小数计算的精度不足而发愁过呢 其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+...
【精品】部编四年级数学下册_小数的加法和减法:小数加减法竖式计算.pdf
labview_32位单精度浮点数转定点小数,亲测可用(Own use labview to build 32-bit single precision floating point decimal turn, pro-test available)
高精度算法,精确到小数点后N位,是制作计算器的必备函数
小数乘法计算练习(二),小数乘法计算练习(二)
用小数计算下面各题.doc
用小数计算下面各题.pdf
用单链表存储有理数N/M(N)的小数形式,若为无限循环小数,则用环链表表示;
写高精度运算和矩阵乘法的时候,把常用的都...高精度数-低精度数(大数-小数) 高精度数-高精度数(大数-小数) 高精度数/低精度数 常用的这些写在一起用起来比较方便...但是自己太懒了,减法就偷工减料了,(困啊)
C语言计算器可以计算 + - / * 连在一起的运算,可以计算各种括号的运算,支持小数计算。 例:-2*(((1+1)*(2+2)+3)+6) = -34
五年级上册数学解方程、小数计算练习.pdf