首先第一个纠结的问题就是单位的问题。是用分还是用元。用分的话就可以避免小数的问题。
先讲用分的
数据库的数据类型用int 后端也用int 就可以。比较容易。在微信支付那块传金额也是分为单位。
缺点
1.用户当然是希望看到元的单位,看到分那么多零用户估计也会抓狂吧。
2.数据处理的时候容易忘记换算单位
用元
数据库的数据类型要用decimal(10,2) 后面的有效数可以自己修改 后端用BigDecimal。
double 和float不精确。因为计算机是二进制的。比如3+1=4.00000000001(我随便举的例子)
用BigDecimal需要注意,最好用string类型来创建new BigDecimal("1");
在微信支付就需要注意转换为分。
我的方法是
BigDecimal conversion= BigDecimal.valueOf(100);
total_fee=total_fee.multiply(conversion);
String fee=total_fee.toString();
data.put("total_fee", fee.split("\\.")[0]);//获取非小数部分
乘100后把后面的小数部分去掉
fee.split("\\.")[0] \\这个是因为.是转义字符