2015-12-23 64 views
-4

更精確計算的最佳類型變量是什麼?精確計算的變量類型(JAVA)

我在BigDecimal中使用了double,並且不準確。

+4

BigDecimal具有任意精度。定義「不準確」。 – azurefrog

+0

[在Java中保留精度和雙精度]可能的重複(http://stackoverflow.com/questions/322749/retain-precision-with-double-in-java) – saljuama

+0

這是一個常見的誤解,您需要'BigDecimal'或我將使用'BigDecimal'修復所有使用'double'的恕我直言的問題,這使得在許多情況下發現錯誤更困難,而且速度更慢。 –

回答

2

一個常見的錯誤正在呼叫

double d = .... 
BigDecimal bd = new BigDecimal(d); 

例如

BigDecimal bd = new BigDecimal(0.1); 
System.out.println(bd); 

打印

0.1000000000000000055511151231257827021181583404541015625 

這產生了雙的精確表示這通常是不想要的結果。相反,你應該使用

double d = .... 
BigDecimal bd = BigDecimal.valueOf(d); 

由於這將產生的BigDecimal在最短的十進制值這將是該double

BigDecimal bd = BigDecimal.valueOf(0.1); 
System.out.println(bd); 

打印

0.1 
1

如果準確,你的意思是精密:

精度不能是無限的(或者你應該使用另一個符號表示)。

當您使用某些功能:

1,你必須定義精度(這是非常大的)。

2你也必須考慮舍入模式。

而且在很多情況下,如果您重複使用值進行進一步計算,數學庫不能預測精度結果。所以你必須跟蹤精度。

實施例1/3和100小數:

// 1/3 
BigDecimal one=new BigDecimal(1); 

BigDecimal three=new BigDecimal(3); 

BigDecimal one_third=one.divide(three,100,RoundingMode.HALF_DOWN); // third parameter is round mode 

System.out.println("1/3="+one_third); 

給出:

三分之一= 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333

+1

您總是需要考慮是否起訴雙倍或大倍數。 +1 –

+0

謝謝。我把一些「精確」。 +1 –