2012-02-05 25 views
0

我試圖將用戶的輸入從EditText轉換爲Big Decimal。但是,我遇到問題。我的結果未被轉換。例如,計算完成後,數字將爲12.345678。調用方法round()後,四捨五入的值仍然相同。難道我做錯了什麼?我處理你不使用round結果錢Android - 將雙倍轉換爲大十進制的問題

的.java

  double totalPrice = Double.parseDouble(price.getText().toString()); 

      int position = spinner.getSelectedItemPosition(); 
      name = name1.getText().toString(); 

      if(position == 0) 
      { 
       totalPrice = totalPrice * 1.07; 
       System.out.println(totalPrice); 
      } 
      else 
      { 
       totalPrice = (totalPrice * 1.1)*1.07; 
       System.out.println(totalPrice); 
      } 

      round(totalPrice, 2, BigDecimal.ROUND_HALF_UP); 

      } 

} 

public static double round(double unrounded, int precision, int roundingMode) 
{ 
    BigDecimal bd = new BigDecimal(unrounded); 
    BigDecimal rounded = bd.setScale(precision, roundingMode); 
    return rounded.doubleValue(); 
} 

回答

4

。你應該至少做:

totalPrice = round(totalPrice, 2, BigDecimal.ROUND_HALF_UP); 

然而,你不應該使用double貨幣值與開始。在整個過程中使用BigDecimal - 否則由於二進制浮點操作的方式,您可能會發現您會收到意想不到的結果。

+0

具體而言,請避免使用'Double.parseDouble',並使用'new BigDecimal(String)'從開始。 – 2012-02-05 18:30:00

+0

喬恩 - 謝謝,現在它工作。我認爲'totalPrice'會自動用新值初始化。 Louis - 感謝您的信息。已將其更改爲使用BigDecimal而不是double。儘管使用BigDecimal比使用BigDecimal稍微麻煩一點,但需要聲明新的BigDecimal被乘數。但至少它會避免像喬恩指出的那樣的問題。 – Hend 2012-02-06 03:22:13