SQL SERVER的浮点数类型

2014-11-24 12:06:55 · 作者: · 浏览: 0
SQL SERVER的浮点数类型
SQL SERVER:
float 与 real
7位数或15位数。这里说的位数,不是指小数位,而是包括整数和小数在内的位数。
float的位数是多少,要看float[(n)]里的n数值是多少。
n value 精度 存储大小
1-24
7 位数
4 字节
25-53
15 位数
8 字节
注意:
SQL Server 将 n 视为下列两个可能值之一。如果 1<=n<=24,则将 n 视为 24。如果 25<=n<=53,则将 n 视为 53。
(是不是很怪异)
如果不写这个n,默认n是53,即15位。
real 的 ISO 同义词为 float(24),也就是7位了。
[sql]
declare @f float(18) = 12345.0123456789
,@f2 float(18) = 1234567.0123456789
,@f3 float(18) = 123456789.0123456789
,@f4 float(53) = 123456789.01234567890123456789;
declare @r real = 1234567.01234567890123456789;
select @f as [f],@f2 as [f2],@f3 as [f3],@f4 as [f4],@r as [real];
f f2 f3 f4 real
12345.01 1234567 1.234568E+08 123456789.012346 1234567
decimal和numeric
带固定精度和小数位数的数值数据类型。
decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )]
固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。
p(精度)
最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
s (小数位数)
小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。
精度 存储字节数
1 - 9
5
10-19
9
20-28
13
29-38
17
可见,decimal和numeric可以指定小数位数。如果不指定,默认是不带小数。
[sql]
declare @d decimal = 12.0123456789,@d2 decimal(5,3) = 12.0123456789;
select @d as [d],@d2 as [d2];
d d2
12 12.012
money和smallmoney
代表货币或货币值的数据类型。
数据类型 范围 存储
money
-922,337,203,685,477.5808 到 922,337,203,685,477.5807
8 字节
smallmoney
-214,748.3648 到 214,748.3647
4 字节
注释
money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一。
也就是说,money和smallmoney的小数位固定是4位。
[sql]
declare @m money = 123456789.0123456789;
select @m as [money];
money
123456789.0123