代码之家  ›  专栏  ›  技术社区  ›  Rookatu

输入时字符字段中的小数精度丢失

  •  0
  • Rookatu  · 技术社区  · 4 年前

    我试图在不损失小数精度的情况下将包含数字的字符变量转换为数字变量。下面是一个输出示例:

    data _null_;
    format res 20.17;
    res = input("54.78566360473633",20.17);
    put res;
    run;
    

    结果:

    54.78566360473630000
    

    您可以看到结果中的位数是正确的,但最后一个非零数字与字符变量的最后一个数字不匹配。我尝试过使用数字位数较大或较小的格式(如18.15或15.13),也尝试过使用f20.17这样的格式“强制”小数位数,但这些似乎都不起作用。

    我试着浏览了一些文档页面,但似乎没有什么相关性。我确信这确实是我在这里缺少的基本内容,但是,我怎样才能忠实地阅读所有数字呢?

    1 回复  |  直到 4 年前
        1
  •  2
  •   Tom    4 年前

    SAS有两种数据类型。浮点数和固定长度字符串。格式只是如何显示值的说明。通知是如何将文本转换为值的说明。附加到变量的FORMAT或用于在变量中创建值的INFORMAT都不会对数字的存储方式产生任何影响。

    若你们想使用十进制算术,那个么把你们的值存储为整数,并在一个单独的变量中跟踪指数。但即便如此,根据SAS版本使用的浮点表示中使用的尾数大小,您可以存储的精度也会受到限制。您可以使用CONSTANT()函数的EXACTINT选项看到SAS可以精确存储的最大连续整数。