在MySQL中我们经常会用到一些高精度和长度的数据类型,例如对于金额的时候,一般会选择 decimal 或者 numeric 类型。
当然在遇到金额计量的时候也尝试过 float 类型,float(M,D)后来,在精度精确到小数点8为的时候,保存的同时就发现了问题,最后一位会四舍五入,而不是自己手动输入的值。后来查阅了相关资料才找到原因:
区别:
在MySQL中,loat,double 等非标准类型,在DB中保存的是近似值。
而 Decimal 则以字符串的形式保存数值。
解释:
float,double 类型是可以存浮点数(即小数类型)。
浮点数如果不写经度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错。
float 和 decimal 间区别:
- 当你给定的数据是整数的时候,那么它就以整数给你处理。
- default 值为:0.00而实际存储是0,同样我存取货币为15.00,实际存储是15。
- float 占4个字节,double 占8个字节,decimail(M,D) 占M+2个字节
此时因为他们容易产生误差,我们可以选择使用 numeric 和 decimal 同义,numeric 将自动转成 decimal。
所以建议大家在遇到类似于货币类型计算的时候,选择 decimail 准没错。