java.lang.numberformatexception: invalid double: “ ”

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

getting an error of invalid Double java.lang.numberformatexception invalid double: "" what is the reason for this

Activity 1

package com.example.solarcalculator;          import android.os.Bundle;         import android.widget.Button;         import android.annotation.SuppressLint;         import android.app.Activity;         import android.view.Menu;         import android.view.View;         import android.view.View.OnClickListener;         import android.widget.EditText;         import android.app.AlertDialog;         import android.content.Intent;          @SuppressLint("UseValueOf")         public class MainActivity extends Activity {             private EditText input1;             private EditText input2;             private EditText input3;             private EditText input4;             private EditText input5;             private MainActivity mContext;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         mContext = this;         setContentView(R.layout.activity_main);          input5 = (EditText) findViewById(R.id.input5);         Button button1 = (Button) findViewById(R.id.button1);         input4 = (EditText) findViewById(R.id.input4);         input1 = (EditText) findViewById(R.id.input1);         input2 = (EditText) findViewById(R.id.input2);         input3 = (EditText) findViewById(R.id.input3);         button1.setOnClickListener(new OnClickListener() {              @SuppressWarnings("unused")             private AlertDialog show;              @SuppressLint("UseValueOf")             @Override             public void onClick(View arg0) {                 if (  (input4.getText().toString() == " ")                          || (input4.getText().length() ==0) ||                                                 (input5.getText().length() == 0)                                                  || (input5.getText().toString() == " ")){                 show = new      AlertDialog.Builder(mContext).setTitle("Error")                             .setMessage("Some inputs are empty")                             .setPositiveButton("OK", null).show();                 }     else if ((input1.getText().length() != 0) &&         (input3.getText().length() ==0) && (input2.getText().length() ==    0)){                      double w = new Double(input3.getText().toString());                      double t = new Double(input4.getText().toString());                      double x = new Double(input5.getText().toString());                      float e = 7;                      double num = 1000*x;                      double den = w*t*e;                      double payback = num/den;                      double money = w*t*e/1000;          Intent intent = new Intent(MainActivity.this, Power.class);                      intent.putExtra("payback", payback);                      intent.putExtra("money", money);                      startActivity(intent);                  }     else if ((input1.getText().length() == 0) &&   (input3.getText().length() != 0) &&                                 (input2.getText().length() != 0)){                      double t = new                                          Double(input4.getText().toString());                      double x = new Double(input5.getText().toString());                      double v = new Double(input2.getText().toString());                      double i = new Double(input3.getText().toString());                      float e = 7;                      double num = 1000*x;                      double den = v*i*t*e;                      double payback = num/den;                      double money = v*i*t*e/1000;              Intent intent = new Intent(MainActivity.this, Power.class);                      intent.putExtra("payback", payback);                      intent.putExtra("money", money);                      startActivity(intent);                  }                 else {                     double t = new Double(input4.getText().toString());                      double x = new Double(input5.getText().toString());                      double v = new Double(input2.getText().toString());                      double i = new Double(input3.getText().toString());                      float e = 7;                      double num = 1000*x;                      double den = v*i*t*e;                      double payback = num/den;                      double money = v*i*t*e/1000;                Intent intent = new Intent(MainActivity.this, Power.class);                      intent.putExtra("payback", payback);                      intent.putExtra("money", money);                      startActivity(intent);                  }             }         });      }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.main, menu);         return true;     }         } 

Activity2

package com.example.solarcalculator;      import android.annotation.SuppressLint;     import android.app.Activity;     import android.os.Bundle;     import android.widget.TextView;    @SuppressLint("NewApi")      public class Power extends Activity {  private double money; private double payback;  @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) {     // TODO Auto-generated method stub     super.onCreate(savedInstanceState);     setContentView(R.layout.power);     payback = getIntent().getDoubleExtra("payback",0);     money = getIntent().getDoubleExtra("money", 0);     TextView pay = (TextView) findViewById(R.id.textView2);     String payback1 = Double.toString(payback);     pay.setText(payback1);     TextView mon = (TextView) findViewById(R.id.textView4);     String money1 = Double.toString(money);     mon.setText(money1);       }     } 

I am getting java.lang.numberformatexception invalid double: "" error in logcat anyone please help

回答1:

The reason is, that "" is not a valid double. You need to test the String before or catch such exceptions

double w;  try {     w = new Double(input3.getText().toString()); } catch (NumberFormatException e) {     w = 0; // your default value } 


回答2:

You should do as below. Put it inside a try catch block

   double w = new Double(input3.getText().toString()); 


回答3:

The value of the double depends on the language of the device.For example, for devices in french the number 0.179927 becomes 0,179927 which will always throw a NumberFormatException when parsing it to double because of the comma.

You need to change the separator from a comma to a point. You can change the separator either by setting a locale or using the DecimalFormatSymbols.

If you want the grouping separator to be a point, you can use a european locale:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat df = (DecimalFormat)nf; 

Alternatively you can use the DecimalFormatSymbols class to change the symbols that appear in the formatted numbers produced by the format method. These symbols include the decimal separator, the grouping separator, the minus sign, and the percent sign, among others:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); otherSymbols.setDecimalSeparator(','); otherSymbols.setGroupingSeparator('.');  DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 


回答4:

Better to also test for .equals("") along with null.

Consider you have an afterTextChanged listener on an EditText. When you back press and clear the entered text, it'll pass != null, but still have "".

This worked for me:

    double myDouble;      String myString = ((EditText) findViewById(R.id.editText1)).getText().toString();      if (myString != null && !myString.equals("")) {         myDouble = Double.valueOf(myString);     } else {         myDouble = 0;     } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!