本文主要是介绍微信支付少1分钱(完美解决问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
微信支付踩到的坑 。。。。。
微信支付需要转换成分 使用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 我也不知道是否正确欢迎大佬提一下正确的理论。。。。。。。。
这篇关于微信支付少1分钱(完美解决问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!