收到无效Double的错误
java.lang.numberformatexception无效的double:
这是什么原因
活动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;
}
}
活动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);
}
}
我正在获取java.lang.numberformatexception无效的double:" logcat中的错误
任何人请帮忙
"不会显示双精度!您必须先测试空字符串,然后再转换为双精度。
在哪一行上会出现这种类型的错误?
我在第52行收到此错误
原因是""不是有效的double。您需要先测试String或捕获此类异常
double w;
try {
w = new Double(input3.getText().toString());
} catch (NumberFormatException e) {
w = 0; // your default value
}
代替:double amount = Double.parseDouble(amt.toString()); ,我必须这样做:提取用户输入时,double amount = new Double(amt.getText()。toString());。 谢谢。
double的值取决于设备的语言,例如,对于法语设备,数字0.179927变为0,179927,由于逗号将NumberFormatException解析为double时,它将始终抛出NumberFormatException。
您需要将分隔符从comma更改为point。
您可以通过设置区域设置或使用DecimalFormatSymbols来更改分隔符。
如果希望分组分隔符成为一个点,则可以使用欧洲语言环境:
另外,您可以使用DecimalFormatSymbols类更改由format方法生成的带格式数字中出现的符号。这些符号包括小数点分隔符,分组分隔符,减号和百分号,以及其他:
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);
这个答案在这里没有帮助,因为这里的异常是由空String引起的。
也许这个答案不能解决这里提出的问题,但是对于寻找相同例外的人,需要知道所有可能的问题。 就我而言,这是相同异常和代码的有效答案。
您应该执行以下操作。将其放在try catch块中
double w = new Double(input3.getText().toString());
基本上,您需要测试要转换为double的字符串是否为空。
如果为空,则可以使用一些值对其进行初始化,然后继续进行。
例如:
if(myString.isEmpty()){
myString =""+0.0;
}
double answer = Double.parseDouble(myString);
最好同时测试.equals("")和null。
考虑在EditText上有一个afterTextChanged侦听器。当您向后按并清除输入的文本时,它将通过!= null,但仍然具有""。
这为我工作:
double myDouble;
String myString = ((EditText) findViewById(R.id.editText1)).getText().toString();
if (myString != null && !myString.equals("")) {
myDouble = Double.valueOf(myString);
} else {
myDouble = 0;
}