提问人:mezoid 提问时间:3/4/2010 最后编辑:fredtmezoid 更新时间:1/7/2022 访问量:383698
如何解释数据库中数字的精度和小数位数?
How do I interpret precision and scale of a number in a database?
问:
我在数据库中指定了以下列:decimal(5,2)
如何解释这一点?
根据在 SQL Server Management Studio 中查看的列的属性,我可以看到它的意思是:decimal(Numeric precision, Numeric scale)。
精度和规模的实际含义是什么?
很容易将其解释为具有 5 位数字和 2 位小数的小数......即 12345.12
P.S. 我已经能够从同事那里确定正确答案,但很难在网上找到答案。因此,我希望将问题和答案记录在stackoverflow上,以备将来参考。
答:
数字精度是指数字中存在的最大位数。
IE 1234567.89 的精度为 9
数字刻度是指最大小数位数
IE 123456.789 的比例为 3
因此,decimal(5,2) 的最大允许值为 999.99
评论
SQL Server 2000 文档中的精度、小数位数和长度如下:
精度是数字中的位数。小数位数是数字中小数点右边的位数。例如,数字 123.45 的精度为 5,小数位数为 2。
评论
数字的精度是位数。
数字刻度是小数点后的位数。
在字段定义上设置精度和小数位数时,通常意味着它们表示最大值。
例如,用 和 定义的十进制字段将允许以下值:precision=5
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) => 可以截断为 (p=4,s=2)12.35
1234.56
(p=6,s=2) => 可以截断为 (p=5,s=1)1234.6
123.456
(p=6,s=3) => 可以截断为 (p=5,s=2)123.46
123450
(p=6,s=0) => 超出范围
请注意,范围通常由精度定义:...|value| < 10^p
评论
12345000
123450 (p=6,s=0)
123450 (p=6,s=0)
(p=5,s=2)
(p=6,s=0)
精度是指总位数,而小数位数是指小数点后允许的数字。 引用的示例的精度为 7,小数位数为 2。
此外,DECIMAL(precision, scale) 是一种精确值数据类型,与存储近似数值数据的 FLOAT(precision, scale) 不同。 例如,定义为 FLOAT(7,4) 的列显示为 -999.9999。MySQL在存储值时执行舍入,因此如果将999.00009插入FLOAT(7,4)列,则近似结果为999.0001。
如果有帮助,请告诉我!
评论