如果存在null变量,我的浮点公式将无法运行。 IE如果其中一个输入变量为null,则TextView中不显示显示结果的结果。
据我所知,有两个解决方案。
如果它们为null,则将null EditTexts设置为0
:
if (charisma == null) {
charisma.setText(0);
} else if (charisma != null) {
charisma.setText(getcharisma);
}
另一个忽略等式中的空变量:
try {
float FP = Float.parseFloat(pref.getString("fp", ""));
float CHR = Float.parseFloat(charismafpvalue.getText().toString());
float PER = Float.parseFloat(persuasionfpvalue.getText().toString());
float ELI = Float.parseFloat(elicitationfpvalue.getText().toString());
float AML = Float.parseFloat(animalhandlingfpvalue.getText().toString());
if (charismafpvalue == null) {
fpr.setText(Float.toString(FP - (PER + ELI + AML)));
} else if (charismafpvalue != null) {
fpr.setText(Float.toString(FP - (CHR + PER + ELI + AML)));
}
}
catch (NumberFormatException ignore) {}
问题是我的这两个代码都无法运行。如果值为null,则值不会设置为0,并且尽管if() {} else if() {}
代码,公式仍无法运行。
有哪些建议可以更好地处理此问题?以及如何实现它?
答案 0 :(得分:1)
解决此问题的一种简洁方法是使用Apache Commons NumberUtils#toFloat(String str, float defaultValue)
方法:
float chr = NumberUtils.toFloat(charismafpvalue.getText().toString(), 0.0f);
...
如果转换失败,这会将chr
设置为默认值,因此也不需要try-catch
。
答案 1 :(得分:0)
改进你的字符串验证。
if (charismafpvalue != null && ! charismafpvalue.isEmpty()) {
// doSomething
}
答案 2 :(得分:0)
Null无法转换为Float,因此您首先需要检查
if(charismafpvalue !=null && charismafpvalue.getText().toString()!=null && !charismafpvalue.getText().equals(""))
与其他观点类似
答案 3 :(得分:0)
您可以使用
Float.valuOf(String s)
返回" s"的浮点表示。如果有的话,或者如果" s"一片空白。像这样:
try
{
float someFloat = Float.valueOf(someString);
}
catch(NumberFormatException nfe)
{
}
catch(NullPointerException npe)
{
}
finally {}
更多信息here
当然,这是为了完整性。空检查始终是赢家!而Keppil的答案也非常好:)
希望这有帮助