最近遇到一個坑,微信小程序中退款 19.9的字符串轉double變成19.89,導致退不成功 。
坑死我了。現在把更改后的代碼貼出來
public static void main(String[] args) {
Double total = Double.parseDouble("19.9");
Double total2 = Double.valueOf("19.9");
//可以看到19.9的字符串使用Double.valueOf轉為double是沒啥問題的
System.out.println("total======"+total);
System.out.println("tota2======"+total2);
String money = String.valueOf(total * 100);
BigDecimal money2 = BigDecimal.valueOf(total2);
// 將temp乘以100
money2 = money2.multiply(BigDecimal.valueOf(100));
System.out.println("money======"+money);//這是使用轉換后的double做了類似乘100這樣的算術運算 可以看到發生了精度損失。
System.out.println("money2======"+money2);//這個用BigDecimal沒有損失精度
int money3 = money2.intValue();
System.out.println(money3);
}
如下: