【发布时间】: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)
【问题讨论】:
为什么下面的select语句会返回两个不同的值?
declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
【问题讨论】:
这对于像 1.0 这样的文字很好,但如果您从表格列中提取数据,则需要转换/转换等式中的第一个评估数字:
convert(decimal, [col1]) / ([col2] + [col3])
-或-
convert(decimal(15, 2), [col1]) / ([col2] + [col3])
【讨论】:
我在发布此消息时从同事那里得知。
您需要指定默认的精度和小数位数。
这适用于这种情况: 声明 @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
【讨论】: