关于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)类型了,此类型一般不提倡使用。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值