DECIMAL和NUMBERIC存储的是确切的数值,使用它们可以保证精确度,例如用于存储金额数据。在MySQL中,NUMBERIC和DECIMAL以同样的类型实现。
double在其他平台double类型不只是在MySQL中存在精度错误的问题,在Oracle、Java等平台同样存在此问题,如下:
简单的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;
综上
只为说明一个问题,如果想要确切的存储小数(例如,金额等),建议使用DECIMAL类型,而不是DOUBLE、float类型。