2012-02-05 59 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

相关问题