2017-05-07 6 views
-1

java.lang.NumberFormatException의 : 입력 문자열의 경우 : "099"은안드로이드 통화 - java.lang.NumberFormatException의 : 입력 문자열 : "099"

이것은 내가지고있어 오류가있는 경우 I this code을 다른 SO 응답에서 실행하여 EditText를 통화로 포맷합니다 (쉼표 뒤의 두 숫자).

나는 여기에 내 코드를 재 게시됩니다

price.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    String current = Double.toString(sub.getPrice()); 

    @Override 
    public void afterTextChanged(Editable s) { 
     if(!s.toString().equals("")){ 
      price.removeTextChangedListener(this); 

      String replaceable = String.format("[%s,.]", NumberFormat.getCurrencyInstance(locale).getCurrency().getSymbol()); 

      String cleanString = s.toString().replaceAll(replaceable, ""); 

      double parsed = Double.parseDouble(cleanString); 
      String formatted = NumberFormat.getCurrencyInstance().format((parsed/100)); 

      current = formatted; 
      price.setText(formatted); 
      price.setSelection(formatted.length()); 

      price.addTextChangedListener(this); 
     } 
    } 
}); 

price

단순히 EditText입니다.

는 지금까지 시도하는 것 :

내가 USD ($)로 통화를 강제로 시도 대신 locale에 기초하고 오류가 나는 유로를 사용하는 경우 동안 (기반, 표시되지 않습니다 로케일) 오류가 발생합니다.

또한 통화를 USD에서 EUR로 전환하면 기호가 $9,00에서 9,00 €으로 바뀌는 것으로 나타났습니다. 나는 그 숫자와 € 사이의 공간이 NumberFormatException을 일으킨다 고 생각하지만, 그것을 고치는 방법에 대한 단서가 없다.

+0

유효한 숫자 문자열이되도록하려면 문자열을 자릅니다. –

+0

정말 투표 결과가 내려진 이유가 없습니다. – Daniele

+0

[NumberFormatException이란 무엇이며 어떻게 고칠 수 있습니까?] (https://stackoverflow.com/questions/39849984/what-is- a-numberformate-in-it-can-i-fix-it) – xenteros

답변

1

"9,00 €"의 공백이 실제로 문제의 원인입니다.

지금 당신은 두 가지 옵션이 있습니다

String replaceable = String.format("[%s,.\\s]", NumberFormat.getCurrencyInstance(locale).getCurrency().getSymbol()); 
  • 를하거나 분석하기 전에 공간을 트림 :

    • 그것을 제거하기 위해 교체 문자 공백 추가를, 즉, 우리는 \s 포함 이중으로 :

      cleanString = cleanString.trim(); 
      double parsed = Double.parseDouble(cleanString); 
      
  • +0

    '[% s,. \\ s]'는 나에게 속임수였습니다. – Daniele