简体   繁体   English

java.lang.numberformatexception:无效双:“”

[英]java.lang.numberformatexception: invalid double: " "

getting an error of invalid Double java.lang.numberformatexception invalid double: "" what is the reason for this得到一个 invalid Double 的错误 java.lang.numberformatexception invalid double: "" 这是什么原因

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活动2

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我收到 java.lang.numberformatexception invalid double: "" error in logcat 任何人请帮忙

The reason is, that "" is not a valid double.原因是,“”不是有效的双倍。 You need to test the String before or catch such exceptions您需要先测试 String 或捕获此类异常

double w;

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

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. double 的值取决于设备的语言。例如,对于法语设备,数字0.179927变为0,179927 ,由于逗号,在将其解析为double时将始终抛出NumberFormatException

You need to change the separator from a comma to a point .您需要将分隔符从comma更改为point You can change the separator either by setting a locale or using the DecimalFormatSymbols .您可以通过设置区域设置或使用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.或者,您可以使用DecimalFormatSymbols类来更改出现在由format方法生成的格式化数字中的符号。 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);

You should do as below.你应该做如下。 Put it inside a try catch block把它放在一个 try catch 块中

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

Better to also test for .equals("") along with null .最好同时测试.equals("")null

Consider you have an afterTextChanged listener on an EditText.假设您在 EditText 上有一个 afterTextChanged 侦听器。 When you back press and clear the entered text, it'll pass != null , but still have "" .当您按下并清除输入的文本时,它会通过!= null ,但仍然有""

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;
    }

Basically, you need to test whether the string that you want to convert into double is empty or not .基本上,您需要测试要转换为 double 的字符串是否为空

If it is empty , then you can just initialise it with some value and then proceed further.如果它是空的,那么你可以用一些值初始化它,然后继续进行。

For example:例如:

if(myString.isEmpty()){
myString = ""+0.0;
}
double answer = Double.parseDouble(myString);
 double latitude;
            double longitude;
            try {
                latitude = Double.parseDouble(mApoAppointmentBeanList.get(position).getLatitude());
                longitude = Double.parseDouble(mApoAppointmentBeanList.get(position).getLongitude());

                String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?q=loc:%f,%f", latitude, longitude);
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
                startActivity(intent);

            } catch (NumberFormatException e) {
                // your default value
                Toast.makeText(AppointmentsActivity.this, "Invalid location", Toast.LENGTH_LONG).show();
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM