我在数据库中指定了以下列:decimal(5,2)
如何解释这一点?
根据在 SQL Server Management Studio 中查看的列上的属性,我可以看到它的意思是:十进制(数字精度,数字刻度)。
精度和规模在实际中意味着什么?
很容易将其解释为具有 5 位数字和两位小数的小数...即 12345.12
PS我已经能够从一位同事那里确定正确的答案,但很难在网上找到答案。因此,我希望在 stackoverflow 上记录问题和答案,以供将来参考。
数值精度是指数字中存在的最大位数。
即 1234567.89 的精度为 9
数字刻度是指最大小数位数
即 123456.789 的比例为 3
因此,十进制(5,2)的最大允许值为 999.99
数字的精度是位数。
数字的小数位数是小数点后的位数。
在字段定义上设置精度和比例时通常暗示的是它们代表最大值。
precision=5
例如,使用and定义的十进制字段scale=2
将允许以下值:
123.45
(p=5,s=2)12.34
(p=4,s=2)12345
(p=5,s=0)123.4
(p=4,s=1)0
(p=0,s=0)以下值是不允许的,否则会导致数据丢失:
12.345
(p=5,s=3) => 可以截断为12.35
(p=4,s=2)1234.56
(p=6,s=2) => 可以被截断为1234.6
(p=5,s=1)123.456
(p=6,s=3) => 可以截断为123.46
(p=5,s=2)123450
(p=6,s=0) => 超出范围请注意,范围通常由精度定义:|value| < 10^p
...
SQL Server 2000 文档中的精度、比例和长度如下:
精度是数字中的位数。比例是数字中小数点右侧的位数。例如,数字 123.45 的精度为 5,小数位数为 2。
精度是指总位数,而比例是指小数点后允许的位数。引用的示例的精度为 7,比例为 2。
此外,DECIMAL(precision, scale) 是一种精确值数据类型,与存储近似数值数据的 FLOAT(precision, scale) 不同。例如,定义为 FLOAT(7,4) 的列显示为 -999.9999。MySQL 在存储值时执行舍入,因此如果将 999.00009 插入 FLOAT(7,4) 列,则近似结果为 999.0001。
让我知道这是否有帮助!