1

基本上,进行类似平均的两个查询给了我不同的结果;预期的“实际”值是 81.25,因此通过正常舍入,您会认为将其转换为 DECIMAL(10,1) 会导致 81.3,但其中一个查询(第一个)给出 81.2

以下是示例:

CAST( AVG( t1.NumCorrect / 7.0 * 100.0 ) AS decimal(10,1))

对比

CAST( AVG( t2.PercentCorrect ) AS decimal(10,1))

据我所知,唯一的区别是 PercentCorrect 是 REAL 类型,而 NumCorrect 是 FLOAT 类型。但它们都是浮点类型,那么为什么转换它们的行为会有所不同呢?

在第一行中,NumCorrect 就像“在 7 个可能中正确”,所以我正在计算一个“百分比”,然后是 AVG'd;而在第二个示例中,百分比是预先计算的,我只需要它 AVG'd。同样,第一行是给出 81.2 而不是 81.3

如果我需要为周围的查询或源数据提供更多上下文,我可以尝试……让我知道。

4

2 回答 2

3

在 SQL 上执行此操作,您将得到答案。

select 1425554.3/5457.251


select convert(real, (1425554.3/5457.251))

基本上, t2.PercentCorrect 已经被转换/转换为截断小数点值的实数。t1.NumCorrect 动态除法,所有小数点都在 avg 函数上处理。

希望这可以帮助!

于 2013-02-05T23:10:46.643 回答
1

最简单的方法是除以 1.0,它将产生 6 位精度。

例子:

select avg(incomeamount/1.0),vendorid from dailyincome group by vendorid 
于 2016-10-15T02:43:45.757 回答