我想使用此方法将字符串解析为十进制
try {
Double.parseDouble(str);
} catch (Exception exception) {
exception.printStackTrace();
}
如果我在EditText中添加任何字母或者后跟一个字母的数字(到目前为止都很好),它会抛出异常,但是当我输入一个数字后跟字母d或f(例如2.1或2.1f)时,它不会抛出异常。该方法将2.1d string或2.1f string视为2.1float或2.1double,并将double作为2.1d或2.1f返回,程序崩溃。 我还尝试使用:
解析字符串NumberFormat.getInstance().parse(str);
Double.valueOf(str);
Double doubleObject = new Double(str);
double number = doubleObject.doubleValue();
StringUtils.isNumeric(str);
结果是一样的。
最后我使用if(str.contains(d)||str.contains(f))throw new Exception(...)
是否有其他方法或其他方法可以在不使用if的情况下执行此操作。
答案 0 :(得分:0)
如果我是你,我会这样做。
Double numberVar = Double.parseDouble(yourEditText.getText().toString());
if(new Double(numberVar) istanceof Double){
return true;
}
非常干净,因为字符串包含0或1或任何其他数字并不意味着它不包含a或I。
答案 1 :(得分:-2)
您应该使用Long来解析数字。因为Double是浮点数并且它不会抛出浮点值的异常,并且 d 表示Double中的值,所以它仍然不会抛出异常。你应该使用Long。
喜欢这个
Long.parseLong(str);
但是仍然会接受 l 。所以你可以在解析之前添加一个if条件
if(!str.contains("l"))
{
Long.parseLong(str);
}
else
{
// it is not a number.
}
另一个解决方案是将 inputType 放在EditText
android:inputType="numberDecimal"
希望它对你有用。