sql数据类型舍入

时间:2014-10-17 19:17:46

标签: sql sql-server

我有以下查询。

declare
@a NUMERIC(20,4)
set @a=24900*0.3333333333
select @a

我期待8299.999999,但它会8300.00。有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您的结果已四舍五入,因为您只有4位小数。使用

set @a = round(24900*0.3333333333, 4, 1)

这不会舍入但会截断结果。

我不知道这是否是您想要的,因为0.12346之类的值会被截断为0.1234而不会舍入为0.1235

答案 1 :(得分:1)

因为评估为24900*0.3333333333的后续表达式8299.9999991700的结果会自动舍入到只有4位小数(NUMERIC(20,4))的刻度:

declare @a NUMERIC(20,4)
set @a=24900*0.3333333333
select @a AS [@a], 
    24900*0.3333333333 AS [result #1], 
    ROUND(24900*0.3333333333, 4) AS [result #2], 
    ROUND(24900*0.3333333333, 4, 1) AS [result #3]
/*
@a        result #1       result #2-round result #3-trunc
--------- --------------- --------------- ---------------
8300.0000 8299.9999991700 8300.0000000000 8299.9999000000
*/

解决方案是使用ROUND(exp, 4, 1)将结果截断为4位小数(参见结果#3)。

答案 2 :(得分:0)

你可能想要这样或类似的东西:

declare @a NUMERIC(20,6)
set @a=cast(24900 as numeric(20,6))*cast(0.3333333333 as numeric(20,10))
select @a