1:float,double容易产生误差,在DB中保存的是近似值,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币,财务要求精确度高的数据。
2:decimal小数补位举例:当数值在其取值范围之内,小数位多了,则直接截断小数位。
DECIMAL(5,3) 一共5位,小数点后3位
1.2345 --- 小数点后最多3位,所以保存可以,自动四舍五入数据截断。
12.345 --- OK
123.45 --- 因为小数部分未满3位,要补0.所以保存应该123.450。所以整个位数超出了5,保存不可。
1.2 --- 小数未满部分补0。按照1.200保存。
当插入的整数部分的值超过了其表示范围后就直接忽略了小数部分的值,并以最大值填充。 当整数部分合法,小数部分多余的位数,直接截断
salary DECIMAL(5,2)
在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -999.99 到 999.99。(即M代表总位数,D代表小数点后的位数)
3:效率比较
float是最基本的数据类型,它的运算可以直接在cpu上运行,而decimal是mysql的数据类型,它的运算依赖于mysql。所以float效率更高。