浮点数存金额迟早会对不上账,二进制没法精确表示 0.1 这类小数。
数据库用定点类型,MySQL 写 decimal(18,2),别用 float。
应用层用十进制类型参与运算,中途别转成 double。
比较金额不要写等号,改成差额小于最小币值的判断。
-- 数据库:定点小数,禁止 float / double
ALTER TABLE t_order MODIFY amount DECIMAL(18,2) NOT NULL;
// Java:构造时传字符串,别传 double
BigDecimal a = new BigDecimal("0.1");
THE END






暂无评论内容