处理 SAS 中的舍入错误

jun*_*hes 0 sql database sas rounding proc

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

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

我尝试了各种修复方法,但所有似乎都会导致另一个方向出现其他舍入错误。对于产生错误量 = 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
Run Code Online (Sandbox Code Playgroud)

其中第二个解决了问题,但在另一个方向上产生了三个舍入误差。

非常感谢任何帮助。

谢谢。

APH*_*APH 5

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

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