为什么“5,447”在解析为double时会抛出错误?

时间:2014-04-08 11:22:27

标签: java android string double

我想检测给定字符串是否为数字。它可以是int或double

为什么在值=" 5,447"

时抛出异常
  private boolean isParseDoubleOk(String value) {
    try {
      Double.parseDouble(value);
      return true;
    } catch (NumberFormatException nfe) {
      return false;
    }
  }

7 个答案:

答案 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