我進行了一些測試。
truncate(abs('414')/100,2)
truncate('414'/100,2)
truncate('4.14',2)
truncate('4.1400',2)
都有精度丟失。
TRUNCATE(cast(ABS(字符串)/100 as decimal(15,4)) ,2)
上述方法,ABS(字符串)/100得到的應該是double類型,cast是將double類型強制轉換為了decimal類型,這個過
程精度是保持不變的嗎?
select truncate(cast(abs('414')/100 as decimal(15,4)),2);
測試結果是正確的4.14
TRUNCATE(ABS(cast(字符串)as decimal(15,4))/100 ,2)
select truncate(abs(cast('414' as decimal(15,4)) )/100 ,2);
測試結果也是正確的4.14
select
truncate( -- decimal
cast -- decimal,此處可能會損失精度
(
abs('414') -- double
/100 -- double
as decimal(15,4)
)
,2
);
正確只是巧合。
select
truncate( -- decimal
abs( -- decimal
cast('414' as decimal(15,4)) -- decimal
)/100, -- decimal
2
);
所以用下面的方法才是對的。
