mysql 字符串數值計算 精度丟失


我進行了一些測試。
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
);


所以用下面的方法才是對的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM