mysql 中的decimal

哦对,decimal这玩意儿,用得就是稳。
2 02 2 年我还在公司,那个项目,就是用decimal来存订单金额的。
用float?想想都头大。
那个数据,精确到分,不能差一点。
float一搞,四舍五入,客户投诉都来了。
所以啊,直接上decimal(1 0,2 ),M是1 0,D是2 ,妥妥的。
那个项目,金额最大就到9 9 9 9 9 9 .9 9 ,小数点后两位,正好。
当时数据库管理员就说了,这玩意儿,内存消耗是有点大,但精度,必须的。
你想想,一千万笔订单数据,差一分,那损失多大。
反正,用decimal,心里就踏实。

mysql 中的decimal

哎哟,说起这个decimal数据类型,我可是踩过不少坑呢。
记得有一次,我接了一个金融项目,要用MySQL数据库存储货币数据。
那时候我年轻气盛,直接用了float类型,结果算出来的利息差了好多,客户差点把我骂到外太空去。

那时候,我就傻眼了,心想这可怎么办。
后来,我上网查资料,才发现MySQL有这个神奇的decimal类型,专门用来处理这种需要高精度的数值。
我就赶紧修改了数据库设计,把float换成了decimal,还指定了精度和数值范围,比如DECIMAL(5 ,2 ),这样就能保证小数点后两位,不会出现那种四舍五入的问题。

结果,项目顺利完成了,客户也很满意。
不过说起来,那时候我还真是不懂,DECIMAL(5 ,2 )这个表示法,其实是有讲究的。
M代表精度,D代表小数点后的位数。
我还记得,在MySQL3 .2 3 以上版本,这个范围的计算方式有点不同,但好处是保持了高精度和固定小数位数,这对于金融数据来说,简直太重要了。

现在想想,那时候要是有个懂行的朋友给我指点一下,估计我能少踩不少坑。
哎,学无止境啊。

decimal是什么类型

DECIMAL(M,D)存储精确数值,避免浮点数误差。

DECIMAL(5 ,2 )占用7 字节,范围-9 9 9 9 .9 9 到9 9 9 9 .9 9
MySQL3 .2 3 后,DECIMAL(M,D)等价于DECIMAL(M+2 ,D)。

财务计算用DECIMAL,比FLOAT和DOUBLE精度高。

根据精度需求选择M值,小数位用D值控制。

小数位多直接截断,超出范围用极限值填充。