微信支付踩到的坑 。。。。。
微信支付需要转换成分 使用double转换时出现的问题:
public static void main(String [] str){
String a = "19.90";
Double totals = Double.parseDouble(a);
totals = totals * 100;
Long totalL = totals.longValue();
System.out.println(totalL);
}
结果:丢失精度 = 丢钱1分
解决:totals * 1000 / 10
public static void main(String [] str){
String a = "19.90";
Double totals = Double.parseDouble(a);
totals = totals * 1000 / 10;
Long totalL = totals.longValue();
System.out.println(totalL);
}
结果:1990 = 正常
看到这里相信各位的问题已经解决了,我最近问了一下身边的大佬,大佬回答我:机器在运行时,使用2进制形式的计数方式,而我们日常生活中的计算是10进制的,对于整数的加减乘除,double还能适用,但是对于有小数的,则容易发生精度丢失,即用2进制表示10进制小数时,部分小数只是近似的表示,2进制表示不完全准确,此时,只能用BigDecimal来进行精确的精度计算
涉及金钱建议使用BigDecimal 我也不知道是否正确欢迎大佬提一下正确的理论。。。。。。。。