String轉double失去精度問題


最近遇到一個坑,微信小程序中退款 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);

}

如下:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM