2014-04-08 78 views
-2

我想检测一个给定的字符串是否是一个数字。它可以是int或double为什么“5,447”在解析时会抛出错误加倍?

为什么当值=“5447”

private boolean isParseDoubleOk(String value) { 
    try { 
     Double.parseDouble(value); 
     return true; 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
    } 
+0

您的头衔和身体不符。 5,447!= 5,4447 – OrhanC1

+0

错字,这是无关 –

+4

用**点**代替**逗号**。 –

回答

2

尝试

private boolean isParseDoubleOk(String value) { 
    try { 
     String str = value.replace(",", ""); 
     Double.parseDouble(str); 
     return true; 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
    } 
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; 
    } 
} 
1
private boolean isParseDoubleOk(String value) { 
    try { 
     value = value.replace(",", ""); 
     Double.parseDouble(value); 
     return true; 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
} 
2

因为逗号字符串

value = value.replace(",", ""); 
2

更换逗号

private boolean isParseDoubleOk(String value) 
{ 
    try 
    { 
     Double.parseDouble(value.replace(",", ".")); 
     return true; 
    } 
     catch (NumberFormatException nfe) 
    { 
     return false; 
    } 
} 
2

删除这一切的逗号。如果您想将5,447作为数字进行映射,则用空码(“”)替换字符串中的,,然后检查。

1

Here the link添加到JLS(Java语言规范),证明逗号不是浮点文字中的有效小数点。

所以你必须用点替换逗号。如果您有本地化输入(在欧洲许多地方逗号通常是!),那么您应该应用直接字符串处理(以点替换逗号)或考虑java.text.DecimalFormat(或NumberFormat),然后将任何BigDecimal结果转换为double

相关问题