SAS中文论坛

标题: 请教各位高手!数值3200011003070000002为何显示不对?详细程序如下 [打印本页]

作者: shiyiming    时间: 2011-5-18 09:12
标题: 请教各位高手!数值3200011003070000002为何显示不对?详细程序如下
data b;
ATTRIB
a LABEL="金额" informat=best19. format=best19.;
a=3200011003070000002;
put a ;

run;

对于a的值,输出是3200011003070000128
不知是什么原因?
请教各位高手!
作者: shiyiming    时间: 2011-5-18 16:20
标题: Re: 请教各位高手!数值3200011003070000002为何显示不对?详细程序如下
sas在处理数值的时候是以浮点型数值去处理的,用的是双精度的浮点型,学过c的话应该知道,用的标准是IEEE754-2008.
算法:value=(sign)*(2**exponent-1023*(1+b**1/2**1+b**2/2**2...)
如3=(1)*(2**(1024-1023)*(1+1**1/2**1))=2*(1.5)=3
你可以用下面的code去生成这一长串的二项式,然后计算一下就知道为什么是那个值了。

data a;
keep n sign exponent mantissa;
length bits $ 64 sign $ 1 mantissa $ 52;
input n @@;
bits = put(n,binary64.);
sign = substr(bits,1,1);
exponent=input(substr(bits,2,11),binary12.)-1023;
mantissa = substr(bits,13,52);
format n best19.;
cards;
3200011003070000002
;
run;
所以存这么长的数值,又要保证完全正确,不如用字符,当然空间会浪费点。
作者: shiyiming    时间: 2011-5-18 16:46
标题: Re: 请教各位高手!数值3200011003070000002为何显示不对?详细程序如下
很强大
多谢
作者: shiyiming    时间: 2011-5-18 21:51
标题: Re: 请教各位高手!数值3200011003070000002为何显示不对?详细程序如下
9,007,199,254,740,992是windows和unix系统能储存的最大整数值. os390能存的最大值是72,057,594,037,927,936.




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2