mysql 字符串数值计算 精度丢失

2023-06-25,,

我进行了一些测试。
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
);

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

mysql 字符串数值计算 精度丢失的相关教程结束。

《mysql 字符串数值计算 精度丢失.doc》

下载本文的Word格式文档,以方便收藏与打印。