【问题标题】:How do I interpret precision and scale of a number in a database?如何解释数据库中数字的精度和比例?
【发布时间】:2010-03-04 05:54:01
【问题描述】:

我在数据库中指定了以下列:decimal(5,2)

如何解释这一点?

根据在 SQL Server Management Studio 中查看的列上的属性,我可以看到它的意思是:十进制(数值精度,数值刻度)。

精度和规模的实际含义是什么?

很容易将其解释为具有 5 位数字和两个小数位的小数...即 12345.12

附:我已经能够从一位同事那里确定正确的答案,但很难在网上找到答案。因此,我希望将问题和答案记录在 stackoverflow 上,以供将来参考。

【问题讨论】:

    标签: sql database decimal scale precision


    【解决方案1】:

    数字精度是指数字中存在的最大位数。

    即 1234567.89 的精度为 9

    数字刻度是指最大小数位数

    即 123456.789 的比例为 3

    因此,decimal(5,2) 的最大允许值为 999.99

    【讨论】:

    【解决方案2】:

    数字的精度是位数。

    数字的小数位数是小数点后的位数。

    在字段定义上设置精度和比例时通常暗示它们代表最大值值。

    例如,用precision=5scale=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 ...

    【讨论】:

    • 请注意,MS SQL Server 不允许使用 12345 或 1234.56,因为“[精度] 减去 [刻度] 以确定小数点左侧的最大位数。” (来源:decimal and numeric
    • 12345000 怎么样?精度 5 还是 8?如果是 5,用什么比例尺?比例 -3?
    • 不错的答案,但为什么123450 (p=6,s=0) 超出范围? 123450 有 6 位数字,点后没有数字?
    • @MatthiasBurger 123450 (p=6,s=0) 将超出精度为 5 的十进制字段的范围(如示例中所述)。因为要存储在字段中的数字的精度必须小于或等于字段的精度。
    • @DominikSeitz 啊谢谢,我误解了 boumbh 的答案。 123450 超出了(p=5,s=2) 的范围。我知道 123450 超出了(p=6,s=0) 的范围
    【解决方案3】:

    Precision, Scale, and Length 在 SQL Server 2000 文档中写道:

    精度是数字中的位数。比例是数字中小数点右侧的位数。例如,数字 123.45 的精度为 5,小数位数为 2。

    【讨论】:

    • 谢谢。我刚刚意识到一段 Delphi/Pascal 代码使用 0 的比例来截断浮点数的小数部分
    【解决方案4】:

    精度是指总位数,而比例是指小数点后允许的位数。 引用的示例的精度为 7,比例为 2。

    此外,DECIMAL(precision, scale) 是一种精确值数据类型,与 FLOAT(precision, scale) 之类的存储近似数值数据的数据类型不同。 例如,定义为 FLOAT(7,4) 的列显示为 -999.9999。 MySQL 在存储值时会进行舍入,因此如果将 999.00009 插入 FLOAT(7,4) 列,则近似结果为 999.0001。

    如果这有帮助,请告诉我!

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 2011-11-15
      相关资源
      最近更新 更多