gpt4 book ai didi

sql-server - 十进制精度和小数位数

转载 作者:行者123 更新时间:2023-12-04 04:49:02 26 4
gpt4 key购买 nike

此表达式使用隐式转换:

SELECT 9.999 * '9.999'

并评估 99.980001。

如果我使用这个记录类型信息:
SELECT
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'BaseType'),
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Precision'),
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Scale'),
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'MaxLength')

我得到:
  • 基本类型 数字
  • 精密 9
  • 6
  • 最大长度 5

  • 我相信我理解除了精度之外的所有结果。
    如果小数点左边的位数为 2,右边的位数为 6,则总共为 8。

    为什么SQL Server在这里计算9?

    附言我使用 SQL Server 2008 R2

    最佳答案

    来自 Precision, Scale, and Length (Transact-SQL)

    查看部分

    Operation:
    e1 * e2

    你会发现
    Result precision
    p1 + p2 + 1

    所以在你的情况下 4+4+1 => 9
    除此之外,你会注意到
    SELECT  SQL_VARIANT_PROPERTY(99.999 * '9.999', 'Precision'), --11 => p1+p1+1
    SQL_VARIANT_PROPERTY(99.999 * '99.999', 'Precision'), --11 => p1+p1+1
    SQL_VARIANT_PROPERTY(99.999 * 9.999, 'Precision'), --10 => p1+p2+1
    SQL_VARIANT_PROPERTY(99.999 * 99.999, 'Precision') -- 11 => p1+p2+1


    SELECT  SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Precision') --9 => p1+p1+1


    SELECT  SQL_VARIANT_PROPERTY(9.99 * '9.999', 'Precision')

    原因
    Arithmetic overflow error converting varchar to data type numeric.

    关于sql-server - 十进制精度和小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17718721/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com