2013-06-25 38 views
0

我有以下代碼來計算在3 EditTexts中的2中輸入的值。當輸入點(。)計算器崩潰

public void calculeaza() { 

    totaltest = 0; 
    prod = new String[allprod.size()]; 
    pret = new String[allpret.size()]; 
    cant = new String[allcant.size()]; 

    for (int m = 0; m < allprod.size(); m++) { 

     prod[m] = allprod.get(m).getText().toString(); 
     if (prod[m].matches("")) { 
      prod[m] = Float.toString(0); 

     } 
    } 

    for (int j = 0; j < allcant.size(); j++) { 

     cant[j] = allcant.get(j).getText().toString(); 
     if (cant[j].matches("")) { 
      cant[j] = Float.toString(0); 

     } 
    } 

    for (int k = 0; k < allpret.size(); k++) { 
     pret[k] = allpret.get(k).getText().toString(); 
     if (pret[k].matches("")) { 
      pret[k] = Float.toString(0); 

     } 
    } 

    for (int l = 0; l < allpret.size(); l++) { 

     Float temp = Float.parseFloat(cant[l]) * Float.parseFloat(pret[l]); 

     totaltest = totaltest + temp; 

     TextView totalf = (TextView) findViewById(R.id.total); 
     totalf.setText(String.format("Total: %.2f", totaltest)); 

    } 
} 

問題是,它首先輸入點(。)時崩潰,而不是0.x.How can I this this?或者我怎麼能這樣做,如果用戶輸入0.6例如自動使它0.6? 還有一種方法可以使。(點)和(逗號)能夠輸入浮點值嗎?在我的國家,我們usualy使用逗號,而不是點..

編輯:logcat的:調用calculeaza()

06-26 00:23:53.952: E/AndroidRuntime(15220): FATAL EXCEPTION: main 
06-26 00:23:53.952: E/AndroidRuntime(15220): java.lang.NumberFormatException: Invalid float: "" 
06-26 00:23:53.952: E/AndroidRuntime(15220): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at java.lang.StringToReal.initialParse(StringToReal.java:163) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at java.lang.StringToReal.parseFloat(StringToReal.java:304) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at java.lang.Float.parseFloat(Float.java:300) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.example.testlayout.MainActivity.calculeaza(MainActivity.java:494) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.example.testlayout.MainActivity.onTextChanged(MainActivity.java:517) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.widget.TextView.sendOnTextChanged(TextView.java:7231) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.widget.TextView.handleTextChanged(TextView.java:7290) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8880) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:672) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:196) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.os.Looper.loop(Looper.java:137) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at java.lang.reflect.Method.invokeNative(Native Method) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at java.lang.reflect.Method.invoke(Method.java:511) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-26 00:23:53.952: E/AndroidRuntime(15220): at dalvik.system.NativeStart.main(Native Method) 
+0

請發佈崩潰的堆棧跟蹤。 – thegrinner

+0

補充,謝謝! –

+1

什麼阻止你在for循環中進行檢查? if(pret [k] .matches(「」)){pref [k] = Float.toString(0); (pret [k] .charAt(0)=='。'){pret [k] =「0」+ allpret.get(k).getText()。toString();};' – Luksprog

回答

0

結帳的inputTypeTextView領域時,它會失敗。我想如果你將它設置爲numberDecimal,它將始終採用正確的格式。

佈局:

EditText android:id="@+id/textView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:inputType="numberDecimal" /> 

代碼:

EditText ed = (EditText) findViewById(R.id.textView); 
String s = ed.getText().toString(); 
float f = Float.valueOf(s); 

Log.e(TAG, "Value: " + f); 
+0

我有這個作爲輸入類型:et2.setInputType(InputType.TYPE_CLASS_NUMBER \t \t \t \t | InputType.TYPE_NUMBER_FLAG_DECIMAL); –

+0

看我的編輯。對我來說工作正常。 – SimonSays

+0

你無法知道,但我的EditTexts是動態創建的,所以它們不在任何XML.Thanks,無論如何,我已經修復它。 –

0

上使用的EditText TextWatcher找到 「」 ,相應地將你的字符串轉換成十進制小數部分,並將其轉換爲雙精度點。你是否計算了最終結果?