我想将EditText
转换为float。我这样做:
EditText edt = (EditText) findViewById(R.id.price);
float number = Float.valueOf(edt.getText().toString());
应用程序未加载到我的设备和模拟器中。在他们两个写道:
"the application has stopped unexpectedly. please try again."
如果我删除此行:
float number = Float.valueOf(edt.getText().toString());
该应用可以加载。
我该怎么办?
答案 0 :(得分:2)
我的猜测是edt.getText().toString()
没有返回一个可以变成浮点数的值。尝试在代码周围添加以下内容
`
float number = 0;
try{
number = Float.valueOf(edt.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
` 这应该会让你知道它为什么会死亡。
答案 1 :(得分:0)
如果Number
中没有EditText
您无法将其转换为浮点数,那么您将获得NumberFormatException
。
所以在Float.valueOf
方法周围添加一个try-catch。
答案 2 :(得分:0)
您的应用最有可能崩溃,因为您尝试在应用刚刚启动时将EditText的内容转换为浮动内容。此时,EditText可能为空,或者填充了您在布局文件中设置的一些默认文本,这可能会导致NullPointerException
或NumberFormatException
。
尝试在TextWatcher中获取浮点值:
edt.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
float number = Float.valueOf(edt.getText().toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
答案 3 :(得分:0)
您正在尝试在应用程序打开后立即获取EditText
的值,这意味着没有输入任何内容,应用程序抛出NumberFormatException
。
当您确定输入了某些内容时,您应该只在EditText
中输入值,例如在OnClick
的{{1}}事件中。
答案 4 :(得分:0)
edt
必须包含文本,文本中的每个字符必须是数字或小数点。特别注意,空字符串“”不代表0.它不能被解释为Float值,因此会导致异常。只有“0”,“0.0”等可以解释为零。
您应该在获得值之前测试edt
的值,并catch
Exception
正确测试inputType
。您还应将edt
{{1}}设置为十进制。
答案 5 :(得分:0)
EditText edt = (EditText) findViewById(R.id.price);
float number= Float.parseFloat(edt.getText().toString());