2013-11-26 3 views
0

Я создал программу, которая занимает некоторое количество и печатает ее с%. Но если я вводю более 4 цифр, программа выйдет из строя.Программа вылетает после строкового формата, когда ввод более 4 цифр

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    double currentBillTotal=0.0; 
    double temp=0.0; 
    if(s.length()>0){ 
    NumberFormat nf = NumberFormat.getInstance(); // get instance 
    nf.setMaximumFractionDigits(2); // set decimal places 

    currentBillTotal = Double.parseDouble(s.toString());      
    String st=nf.format(currentBillTotal); 
    currentBillTotal=Double.parseDouble(st); 

    temp=currentBillTotal*0.1; 
    st=nf.format(temp); 
    temp=Double.parseDouble(st); 
    tip10EditText.setText(st); 
    total10EditText.setText(currentBillTotal+temp+""); 

    temp=currentBillTotal*0.15; 
    st=nf.format(temp); 
    temp=Double.parseDouble(st);      
    tip15EditText.setText(st); 
    total15EditText.setText(currentBillTotal+temp+""); 

    temp=currentBillTotal*0.2; 
    st=nf.format(temp); 
    temp=Double.parseDouble(st); 
    tip20EditText.setText(st); 
    total20EditText.setText(currentBillTotal+temp+""); 

    }else{ 
    currentBillTotal = 0.0; 
    tip10EditText.setText((currentBillTotal*0.1)+""); 
    total10EditText.setText(currentBillTotal+(currentBillTotal*0.1)+""); 
    tip15EditText.setText((currentBillTotal*1.5)+""); 
    total15EditText.setText(currentBillTotal+(currentBillTotal*0.15)+""); 
    tip20EditText.setText(currentBillTotal*0.2+""); 
    total20EditText.setText(currentBillTotal+(currentBillTotal*0.2)+""); 
    } 

logcat-

FATAL EXCEPTION: main 
java.lang.NumberFormatException: Invalid double: "3,332" 
    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
    at java.lang.StringToReal.parseDouble(StringToReal.java:269) 
    at java.lang.Double.parseDouble(Double.java:295) 
    at com.example.homework24_11.MainActivity$1.onTextChanged(MainActivity.java:66) 
    at android.widget.TextView.sendOnTextChanged(TextView.java:7092) 
    at android.widget.TextView.handleTextChanged(TextView.java:7151) 
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8794) 
    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30) 
    at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121) 
    at android.widget.TextView.doKeyDown(TextView.java:5246) 
    at android.widget.TextView.onKeyDown(TextView.java:5065) 
    at android.view.KeyEvent.dispatch(KeyEvent.java:2609) 
    at android.view.View.dispatchKeyEvent(View.java:7198) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1920) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1395) 
    at android.app.Activity.dispatchKeyEvent(Activity.java:2370) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1847) 
    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701) 
    at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651) 
    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5039) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 
FATAL EXCEPTION: main 
java.lang.NumberFormatException: Invalid double: "1,111" 
    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
    at java.lang.StringToReal.parseDouble(StringToReal.java:269) 
    at java.lang.Double.parseDouble(Double.java:295) 
    at com.example.homework24_11.MainActivity$1.onTextChanged(MainActivity.java:66) 
    at android.widget.TextView.sendOnTextChanged(TextView.java:7092) 
    at android.widget.TextView.handleTextChanged(TextView.java:7151) 
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8794) 
    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30) 
    at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121) 
    at android.widget.TextView.doKeyDown(TextView.java:5246) 
    at android.widget.TextView.onKeyDown(TextView.java:5065) 
    at android.view.KeyEvent.dispatch(KeyEvent.java:2609) 
    at android.view.View.dispatchKeyEvent(View.java:7198) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1920) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1395) 
    at android.app.Activity.dispatchKeyEvent(Activity.java:2370) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1847) 
    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701) 
    at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651) 
    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5039) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 
FATAL EXCEPTION: main 
java.lang.NumberFormatException: Invalid double: "3,333" 
    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
    at java.lang.StringToReal.parseDouble(StringToReal.java:269) 
    at java.lang.Double.parseDouble(Double.java:295) 
    at com.example.homework24_11.MainActivity$1.onTextChanged(MainActivity.java:66) 
    at android.widget.TextView.sendOnTextChanged(TextView.java:7092) 
    at android.widget.TextView.handleTextChanged(TextView.java:7151) 
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8794) 
    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30) 
    at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121) 
    at android.widget.TextView.doKeyDown(TextView.java:5246) 
    at android.widget.TextView.onKeyDown(TextView.java:5065) 
    at android.view.KeyEvent.dispatch(KeyEvent.java:2609) 
    at android.view.View.dispatchKeyEvent(View.java:7198) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1920) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1395) 
    at android.app.Activity.dispatchKeyEvent(Activity.java:2370) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1847) 
    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701) 
    at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651) 
    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5039) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 

Как я могу это исправить? Почему программа сбой после 4 цифр? С меньшим он работает просто отлично.

+6

Опубликовать логарифм аварии. – codeMagic

+0

Я добавлю его ... я не знаю, как сделать его доступным для чтения ... lol –

+1

'java.lang.NumberFormatException: Недопустимый double:" 1,111 "' Возможно, это потому, что вы использовали запятую. Парсер, возможно, не нравится это. –

ответ

0

NumberFormat является локализованным классом, а Double.parseDouble - нет. Так что в вашем случае, потому что язык вашей системы не является английским, используется другое форматирование, но Double.parseDouble ожидает английский. 2 способа его решения:

  1. Используйте NumberFormat nf = NumberFormat.getInstance(Locale.EN_US), чтобы создать свой формат номера. Очевидно, что вы не хотите.
  2. Используйте nf.parse(st) для разбора. Это анализирует локализованную строку и должно быть более полезным.
0

Ive нашел тесто для решения моей проблемы.

я пишу этот код:

currentBillTotal = Double.parseDouble (s.toString());

   temp=currentBillTotal*0.1; 

       tip10EditText.setText(String.format("%.2f",temp)); 
       temp=currentBillTotal+temp; 

       total10EditText.setText(String.format("%.2f",temp)); 

в string.Format ("%. 2f", темп) сделал решить проблему более 2-х знаков после запятой ..

спасибо вам всем!

Смежные вопросы