2015-08-09 72 views
0

我遇到大值問題。 請幫幫我。大值丟失精度

Scanner scanner=new Scanner(System.in); 
      double rate=1.0000; 
      double value=scanner.nextDouble(); 
      value*=rate; 
       BigDecimal bigDecimal=new BigDecimal(value); 
      System.out.println(bigDecimal); 

但是,當我進入輸入作爲

121212121212121212121212121212121212121212121212 

我的輸出

121212121212121209445819616146456785067331026944 

請幫助我。 如何準確獲取值?

+0

**無恥插頭:**訪問http://www.adambeneschan.com/How-Does-Floating-Point-Work/,輸入您輸入的號碼(1212121212121212121212121212121212121212121212121212),然後點擊「Double」。這將解釋你爲什麼得到你得到的輸出。 – ajb

回答

1

如果使用精度有限的double進行初始化,沒有意義使用BigDecimal。如果你比1(乘以1是沒有意義的),使用bigDecimal.multiply(...)以外的值要多你的輸入

Scanner scanner=new Scanner(System.in); 
String value=scanner.nextLine(); 
BigDecimal bigDecimal=new BigDecimal(value); 
System.out.println(bigDecimal); 

你應該用一個字符串,而不是將其初始化。

+0

感謝您的評論。但我也想做乘法運算。即使我將字符串中的值更改爲相同的值,也會顯示相同的值。如何做乘法? –

+0

@abdulrahuman例如:'BigDecimal product = bigDecimal.multiply(new BigDecimal(「3526347634625623537」));' – Eran

+0

@abdulrahuman您不能將數字'12121212121212121212121212121212121212121212121212'表示爲double而不會損失精度。這是首先使用'BigDecimal'的動機。 – Eran