为什么下面的 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 decimal(3,2)
来自 MSDN:
decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 SQL-92 同义词是 dec 和 dec(p, s)。numeric 在功能上等同于十进制。
p(精度)可以存储的小数位数的最大总数,包括小数点的左侧和右侧。精度必须是 1 到最大精度 38 之间的值。默认精度为 18。
s(刻度)小数点右侧可以存储的最大小数位数。比例必须是从 0 到 p 的值。仅当指定精度时才能指定比例。默认比例为 0;因此,0 <= s <= p。最大存储大小因精度而异。