关于MSSQL的decimal(numeric)、money、float的使用以及区别

decimal(numeric)、money、float(real) 都是MSSQL中的浮点类型的数据类型。

按存储的范围进行排序

float(real)

decimal(numeric)

money

 

在金额的存储上可以优先money,如果金额过大采用decimal(numeric),极端的情况(数据超大)使用float(real)

 

money与float不会自动默认小数点位数,会自动插入的浮点值默认

例如:

CREATE TABLE #A
(
 PRICE float
)

drop table #A

INSERT INTO #A
SELECT 100.1245678
UNION ALL
SELECT 101.123
UNION ALL
SELECT 102.12
UNION ALL
SELECT 103.1
UNION ALL
SELECT 103

SELECT * FROM #A

 

decimal(numeric)类型精度高,可以指定具体的小数点位数,自定义

CREATE TABLE #A
(
 PRICE decimal(10,2)
)

drop table #A

INSERT INTO #A
SELECT 100.1245678
UNION ALL
SELECT 101.123
UNION ALL
SELECT 102.12
UNION ALL
SELECT 103.1
UNION ALL
SELECT 103

SELECT * FROM #A

 

float精度失真实例:

create table q(

     money float(15,3)

);

 

然后插入这个数据:

insert into q values(1234567.234);

 

再select一下读出来后发现,它显示的是:

1234567.250

 

然后插入这个数据:

insert into q values(12345672.34);

 

再select一下读出来后发现,它显示的是:

12345672.000


也就是说,有10数位与以上的话就会出现不准确的情况。

 

如上可得出结论,数值存储范围越小的精度越高,存储数值范围越大,精度就越不准确,如果存储正常金额的情况下,使用money,好处在于可以存储不指定的小数点位数的数值,比较真实。如果对于既要求精度,又固定小数点位数的数值存储,采用decimal(numeric),优点在于可以自定义小数点位数,精度高。如特殊情况,如数值范围巨大只能用float(real)类型了,此类型一般不提倡使用。

 

 

你可能感兴趣的:(MSSQL数据库)