加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server十进制刻度长度 – 可以还是必须?

发布时间:2020-12-12 16:31:32 所属栏目:MsSql教程 来源:网络整理
导读:我真的只是在SQL Server 2008 R2中对DECIMAL(也许NUMERIC)类型提出质疑. MSDN说: (scale) The maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through p. 我理解如下: 如果我有DEC
我真的只是在SQL Server 2008 R2中对DECIMAL(也许NUMERIC)类型提出质疑.

MSDN说:

(scale)
The maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through p.

我理解如下:

>如果我有DECIMAL(10,5) – 我可以存储12345.12345或12345678.91.
>如果我有DECIMAL(5,5) – 我可以有12345或1234.5或1.2345等…

清楚吗?

但是我收到这个错误信息:

SELECT CAST(2.8514 AS DECIMAL(5,5))

Arithmetic overflow error converting numeric to data type numeric.

我认为5,5意味着我可以有5位数字,最多5位可以是小数点的小数点.

正如我所试

SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too

然而

SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK.

那么什么是真相呢

DECIMAL(a,b)表示我可以有一个数字,并且它们中的一个是小数点的右边(左边的那个a-b到dec点)?

我真的很困惑doc中的声明,它被复制到处.请花一点时间解释一下这个简单的事情.

多谢谢!

解决方法

想到这个(最简单的方法)的最简单方法就是精度是数字的总数,其中scale是小数点右边的位数.所以DECIMAL(p,s)表示点左边的p-s数字,点数右边的s位数.

这解释了你所看到的所有转换错误:2.8514不能是十进制(5,5),因为p-s = 0; 12.851不能为小数(6,因为p-s = 1等等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读