我有以下查询。
declare
@a NUMERIC(20,4)
set @a=24900*0.3333333333
select @a
我期待8299.999999
,但它会8300.00
。有人可以帮我解决这个问题吗?
答案 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