跳转到主内容
Waters China

自定义字段未按预期舍入。 - wkb100025

环境

  • Empower
  • 自定义字段

答案

客户有以下自定义字段,要将 (Avgwt_FP) 另一个自定义字段输出截断为 2 d.p.         

Avgwt_FP              ROUND((Avg_wt_FP+0.005),-2)-0.01

其中                  Avg_wt_FP = Weight_Tabs/Num_of_Tabs 

Empower使用双精度型浮点数在内部表示值,而浮点型值可能会导致出现偏差。

当一个数字的表示格式不是计算机实现支持的本机浮点表示形式时,则需要先进行转换,然后才能用于该实现。如果数字可以精确地表示为浮点格式,则转换是准确的。如果没有精确的表示形式,则在转换时需要选择用于表示原始值的浮点数。选择的表示形式将具有与原始值不同的值,调整后的值称为舍入值。

clipboard_ef6db04a93fdec0d7fe5a9306b29b3035.png

预期值为:

142.940 + 0.005 = 142.945

其中 = 142.95 d.p.

142.95 - 0.01 = 142.94

 

将十进制数转换为浮点数并执行截断计算时:

142.940 = 142.93999999999999772626324556767940521240234375
 
添加 0.005 = 142.9449.. 并四舍五入为 2.d.p. = 142.94
 
那么 142.94 - 0.01 = 142.93

这是Empower给定的值。

附加信息

Oracle 和 Windows 处理值的方式也存在差异。例如,Oracle 使用二进制编码十进制 (BCD) 双浮点格式,而 Windows 使用 IEEE 双浮点格式。 BCD 是一种更准确的方法。

https://www.waters.com/waters/support.htm?lid=1851937&cid=511442&type=TECN

https://www.exploringbinary.com/floating-point-converter/

https://www.theregister.com/2006/08/12/floating_point_approximation/

https://en.wikipedia.org/wiki/Floating-point_arithmetic

https://docs.microsoft.com/en-us/office/troubleshoot/access/floating-calculations-info

id100025, EMP2LIC, EMP2OPT, EMP2SW, EMP3GC, EMP3LIC, EMP3OPT, EMP3SW, EMPGC, EMPGPC, EMPLIC, EMPOWER2, EMPOWER3, EMPSW, SUP