2012-02-05 2 views
0

사용자의 입력을 EditText에서 Big Decimal으로 변환하려고합니다. 그러나, 나는 그것을하는 데 문제가 있습니다. 내 결과가 변환되지 않습니다. 예를 들어, 계산이 완료되면 번호는 12.345678이됩니다. 메소드 round()을 호출 한 후, 반올림 된 값은 여전히 ​​동일합니다. 내가 뭔가 잘못하고 있는거야? 나는 당신이round의 결과를 사용하지 하고 돈안드로이드 - 큰 십진수로 double 변환 문제

된 .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을 사용하지 말고 get-go에서 새 BigDecimal (String)을 사용하십시오. –

+0

존 - 감사합니다. 이제 작동합니다. 나는'totalPrice'가 새로운 값으로 자동 초기화 될 것이라고 생각했습니다. 루이 - 정보 주셔서 감사합니다. double 대신 BigDecimal을 사용하도록 변경했습니다. BigDecimal을 사용하는 것은 새로운 BigDecimal 피연산자를 선언 할 필요가있는 double보다 BigDecimal을 사용하는 것보다 조금 더 번거 롭습니다. 그러나 적어도 Jon이 지적한 것과 같은 문제는 피할 수 있습니다. – Hend