我正在尝试获取平均数字,然后删除后来毫无意义的零,(SQL的新零),但我不明白为什么它不会删除它们,我是吗有错误的想法?
到目前为止,我有;
SELECT total,
AVG(total(TRUNCATE(total/1,2))
我认为您正在寻找下面的cast
。
select cast(17.800000 as dec(3,1))
结果:
val
----
17.8
所以您的查询将为
SELECT total, cast(AVG(total) as dec(3,1))
考虑到您只需要2位.
之前,如果您需要更多数字,则可以相应地对其进行调整。
demo
假设您使用的是SQL Server,则可以将答案放在十进制中的一个小数点:
:选择Cast(AVG(总)为十进制(9,1))
此sqlfiddle显示了:link
SELECT
TRUNCATE(AVG(myFloat), 2),
AVG(myFloat),
ROUND(AVG(myFloat), 2)
FROM docs
您可能应该使用ROUND
而不是TRUNCATE
。
小数点后的东西由于浮点数学而奇怪,并且有时浮点数学被内部计算为.009999999
而不是.01000000000
我相信使用CAST
的这些答案可能具有相同的截断问题。您只想在删除超越感兴趣的小数位置时避免铸造或截断。要明确说明自己正在做的事情,较少的错误将稍后出现。