當用戶向應用程式輸入折扣率時,我正在使用一個按鈕來計算折扣。當我得到低于 1000 的總價值時,它作業正常并提供折扣。但是如果總值大于 1000,它會給出致命例外并使應用程式崩潰。你能幫我解決這個問題嗎?謝謝
calculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Double discountRate = Double.parseDouble(input_rate.getText().toString());
Double discount = 0.0;
if(discountRate.equals("")){
Toast.makeText(CreateInvoiceActivity.this, "Discount Rate is Empty", Toast.LENGTH_SHORT).show();
}
else {
Double totalValue = Double.parseDouble(invoiceTotal.getText().toString());
try {
discount = (totalValue * (discountRate / 100));
Toast.makeText(CreateInvoiceActivity.this, "Discount is" discount, Toast.LENGTH_SHORT).show();
}catch (NumberFormatException ignore){}
}
}
});
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.antlergroup.aits.ierunt.ai, PID: 26795
java.lang.NumberFormatException: For input string: "1,008.00"
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
at java.lang.Double.parseDouble(Double.java:547)
at com.antlergroup.aits.ierunt.ai.view.activity.CreateInvoiceActivity$2.onClick(CreateInvoiceActivity.java:291)
at android.view.View.performClick(View.java:5647)
at android.view.View$PerformClick.run(View.java:22479)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6623)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
I/Process: Sending signal. PID: 26795 SIG: 9
uj5u.com熱心網友回復:
您應該洗掉千位分隔符(逗號)。
Double totalValue = Double.parseDouble(invoiceTotal.getText().toString().replace(",", ""));
你還應該:
- 首選java.text.NumberFormat來決議數字
- 使用正確的語言環境
- 驗證輸入
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339546.html
