場景
之前在做微信支付的時候,踩過一個坑:微信支付出現使用者支付金額比訂單金額少的問題。
就着這個問題上網查了一下,發現是訂單金額計算後精度丢失。
微信訂單金額需要是以分機關傳給微信支付金額的,需要對訂單金額*100計算,在這個計算過程中,出現的精度丢失問題,就照成了實際支付的金額比訂單金額少一分錢。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZwpmL3UTN0QDO0cTM0IzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
解決方案:
在對傳給微信的支付金額,進行先乘1000在除10操作,這樣就會避免金額計算之後精度丢失問題。
// 調用支付接口
double price = Double.parseDouble(mallOrderPay.getOrderAmount() + "");
// 微信支付以分為機關,這裡為了避免計算之後精度丢失問題,先乘1000再除10
price = price * 1000 / 10;
最後說一下支付寶這邊,因為支付寶是傳入實際金額,不需要進行計算,是以沒有這個問題。