处理SAS中的舍入错误

时间:2019-02-20 22:23:10

标签: sql database sas rounding proc

我正在处理大型数据应用程序,但遇到了无法解决的舍入错误。代码基本上是这样的:

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 个答案:

答案 0 :(得分:4)

我无法肯定地说不知道您的数据类型,但是以下更改将有助于解决您的问题:

  1. 确保使用的是十进制数据类型,而不是浮点数。
  2. 结束后结束数学。您将在两个代码段中四舍五入计算的每一步,这很可能会产生错误的结果。
  3. 请特别注意操作/括号的顺序。例如,100-percentage/100的计算结果为100-10/100 = 100-0.1 = 99.9,我认为这不是您想要的。同样,圆括号比在该行上打开的括号要多。