为什么某些格式会在数字到字符转换中创建精度错误?

时间:2016-12-14 13:13:22

标签: sas format

在数据步骤中,如果我

strip(put(number,best32.))

我得到一些数字的精度错误,而不是其他数字:

0.2804 --> "0.2804"
0.0804 --> "0.08039999999999"

我不明白为什么第一个数字完美地转换为字符串而第二个数字有精度错误。是因为实际数字实际上是0.08039999999999(长度为8个字节)并且SAS没有显示那么多的精度(在企业指南中)?

我尝试了这个

strip(put(number,20.10))

然后我得到了很多不需要的零。

0.2804 --> "0.2804000000"
0.0804 --> "0.0804000000"

最后我发现这可以做我需要的事情:

strip(cats(number))

这是最好的选择吗?

1 个答案:

答案 0 :(得分:1)

这是因为您的实际数字接近0.08039999999999而不是0.0804。因此,当你要求它使用最好的数据来呈现数据时,它可以用32个字符来表示,它选择了前者。

尝试运行此代码。

data _null_ ;
  input x ;
  s = put(x,best32.);
  put (x s) (=);
cards;
0.2804
0.0804
0.08039999999
;