1

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

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

2 回答 2

3

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

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

-或者-

convert(decimal(15, 2), [col1]) / ([col2] + [col3])
于 2008-11-13T21:02:30.587 回答
1

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

您需要指定默认精度和比例。

这适用于这种情况:声明@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。最大存储大小因精度而异。

于 2008-11-13T17:28:41.517 回答