我想检测给定字符串是否为数字。它可以是int或double
为什么在值=" 5,447"
时抛出异常 private boolean isParseDoubleOk(String value) {
try {
Double.parseDouble(value);
return true;
} catch (NumberFormatException nfe) {
return false;
}
}
答案 0 :(得分:2)
尝试
private boolean isParseDoubleOk(String value) {
try {
String str = value.replace(",", "");
Double.parseDouble(str);
return true;
} catch (NumberFormatException nfe) {
return false;
}
}
答案 1 :(得分:2)
因为,逗号是字符串
value = value.replace(",", "");
答案 2 :(得分:2)
将逗号替换为点:
private boolean isParseDoubleOk(String value)
{
try
{
Double.parseDouble(value.replace(",", "."));
return true;
}
catch (NumberFormatException nfe)
{
return false;
}
}
答案 3 :(得分:2)
删除所有的逗号。如果您想将5,447映射为数字,请将字符串中的,替换为空代码(“”),然后选中。
答案 4 :(得分:1)
您的号码采用字符串格式,其中包含,
个逗号。当您尝试将此字符串转换为Double时,它肯定会抛出NumberFormatException。
原因是Double.parse()接受一个数字字符串,如“12345”,而不是“12,345”。
要避免此错误,请使用以下代码
private boolean isParseDoubleOk(String value)
{
try {
value = value.replaceAll ( ",", "" ); // Add this line.
Double.parseDouble(value.trim());
return true;
} catch (NumberFormatException nfe) {
return false;
}
}
答案 5 :(得分:1)
private boolean isParseDoubleOk(String value) {
try {
value = value.replace(",", "");
Double.parseDouble(value);
return true;
} catch (NumberFormatException nfe) {
return false;
}
}
答案 6 :(得分:1)
Here the link到JLS(Java语言规范),证明逗号不是浮动文字中的有效小数点。
所以你必须用点替换逗号。如果你有本地化的输入(在欧洲的许多地方通常是逗号!)那么你应该应用直接字符串处理(用点替换逗号)或考虑java.text.DecimalFormat
(或NumberFormat
)然后转换任何{ {1}}结果为BigDecimal
。