Double类型精度问题引起的错误(2)

DECIMAL和NUMBERIC存储的是确切的数值,使用它们可以保证精确度,例如用于存储金额数据。在MySQL中,NUMBERIC和DECIMAL以同样的类型实现。

double在其他平台

double类型不只是在MySQL中存在精度错误的问题,在Oracle、Java等平台同样存在此问题,如下:

Double类型精度问题引起的错误

简单的0.2+0.4,但是返回的结果不是0.6。

回到问题开始

如果换成DECIMAL类型,round的结果将是正确的,如下:

yujx>drop table dd;
yujx>create table dd (a double,b decimal(30,10));
yujx> insert into dd

values(956.745,956.745),(231.34243252,231.34243252),(321.43534,321.43534),

(5464.446,5464.446);
yujx>select a,round(a,2) from dd;

Double类型精度问题引起的错误

综上

只为说明一个问题,如果想要确切的存储小数(例如,金额等),建议使用DECIMAL类型,而不是DOUBLE、float类型。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/545ae48d0bd25add8affbf4411798be7.html