处理 SAS 中的舍入错误

Dealing with rounding errors in SAS

我正在开发一个大型数据应用程序,运行 出现了一个我似乎无法修复的舍入错误。代码基本上是这样的:

proc sql;
select round(amount,.01) - round(amount * (percentage/100),.01) as amount
from data;
quit;

我已经尝试了各种修复方法,但所有方法似乎都会导致其他方向的其他舍入错误突然出现。对于产生错误数量 = 56.45 和百分比 = 10 的行。我得到的结果等于 50.80,我希望结果等于 50.81。我不能接受舍入误差,因为有一个单独的过程可以逆转没有舍入误差的交易,最后逆转加上产生舍入误差的部分必须加起来为零。

我试过的代码:

select round((((100-percentage)/100)*amount), .01)
select round(amount,.01) - round(amount * (percentage/100),.001) as amount

第二个修复了问题,但在另一个方向产生了三个舍入误差。

非常感谢任何帮助。

谢谢。

在不知道您的数据类型的情况下,我不能肯定地说,但这里有一些更改应该有助于解决您的问题:

  1. 确保您使用的是十进制数据类型,而不是浮点数。
  2. 你完成数学。您在两个代码片段中四舍五入计算的每个步骤,这很可能会产生不正确的结果。
  3. 请务必谨慎订购 operations/parentheses。例如,100-percentage/100 的计算结果为 100-10/100 = 100-0.1 = 99.9,我认为这不是您想要的。同样,您在该行上的右括号比左括号多一个。