自定义字段未按预期舍入。 - 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使用双精度型浮点数在内部表示值,而浮点型值可能会导致出现偏差。
当一个数字的表示格式不是计算机实现支持的本机浮点表示形式时,则需要先进行转换,然后才能用于该实现。如果数字可以精确地表示为浮点格式,则转换是准确的。如果没有精确的表示形式,则在转换时需要选择用于表示原始值的浮点数。选择的表示形式将具有与原始值不同的值,调整后的值称为舍入值。
预期值为:
142.940 + 0.005 = 142.945
其中 = 142.95 d.p.
142.95 - 0.01 = 142.94
将十进制数转换为浮点数并执行截断计算时:
这是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