【问题标题】:t-sql decimal assignment changes valuet-sql 十进制赋值更改值
【发布时间】:2008-11-13 17:25:25
【问题描述】:

为什么下面的select语句会返回两个不同的值?

declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)

【问题讨论】:

    标签: tsql decimal


    【解决方案1】:

    这对于像 1.0 这样的文字很好,但如果您从表格列中提取数据,则需要转换/转换等式中的第一个评估数字:

    convert(decimal, [col1]) / ([col2] + [col3])
    

    -或-

    convert(decimal(15, 2), [col1]) / ([col2] + [col3])
    

    【讨论】:

      【解决方案2】:

      我在发布此消息时从同事那里得知。

      您需要指定默认的精度和小数位数。

      这适用于这种情况: 声明 @tempDec 十进制(3,2)

      来自 MSDN:

      十进制[ (p[ , s] )] 和数字[ (p[ , s] )] 固定精度和比例数字。当使用最大精度时,有效值是从 - 10^38 +1 到 10^38 - 1。十进制的 SQL-92 同义词是 dec 和 dec(p, s)。 numeric 在功能上等同于 decimal。

      p(精度) 可以存储的小数位数的最大总数,包括小数点的左侧和右侧。精度必须是 1 到最大精度 38 之间的值。默认精度为 18。

      s(比例) 小数点右侧可以存储的最大小数位数。比例必须是从 0 到 p 的值。仅当指定精度时才能指定比例。默认比例为 0;因此,0

      【讨论】:

      • 即局部变量中的零刻度是在存储点之后删除数据
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2021-07-19
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多