处理SAS中的舍入错误

问题描述 投票:0回答:1

我正在研究一个大型数据应用程序并遇到了一个我似乎无法解决的舍入错误。代码基本上是这样的:

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

第二个修复了问题,但在另一个方向上创建了三个舍入错误。

非常感谢任何帮助。

谢谢。

sql database sas rounding proc
1个回答
4
投票

在不知道您的数据类型的情况下,我无法肯定地说,但这里有一些更改可以帮助解决您的问题:

  1. 确保使用十进制数据类型,而不是浮点数。
  2. 完成数学后回合。您在两个代码片段中对计算的每个步骤进行四舍五入,这可能会产生不正确的结果。
  3. 您的操作顺序/括号要非常小心。例如,100-percentage/100评估为100-10/100 = 100-0.1 = 99.9,我认为这不是你想要的。同样,你还有一个比在该行上打开更近的括号。
© www.soinside.com 2019 - 2024. All rights reserved.