【问题标题】:Number Format Exception - converting with parseInt数字格式异常 - 使用 parseInt 进行转换
【发布时间】:2015-06-19 16:20:29
【问题描述】:

我正在将字符串数字转换为二进制。但是 Eclipse 会抛出 NumberFormatException。我可以请你看一下我的代码吗?我不知道出了什么问题..

public float liczbaF(String lancuch){
    float array [] = new float [31];
    float liczba;
    double mantysa;
    int znak;
    long cecha;
    char element[] = new char[22];
    String temp="";


    if (lancuch.charAt(0)=='1')
        znak=-1;
    else
        znak=1;


    for(int i=1;i<8;i++)
        {
        element[i-1] = lancuch.charAt(i);
        }

    temp=String.valueOf(element);
    System.out.println(temp);
    cecha=Integer.parseInt(temp,10);
    cecha=cecha-127;
    System.out.println(cecha);

    for(int i=31;i>9;i--)
    {
    element[31-i] = lancuch.charAt(i);
    }
    temp=String.valueOf(element);
    mantysa=(((Integer.parseInt(temp,10))/(pow(2,22)))+1);
    liczba=(float)(mantysa*pow(2,cecha));
    return liczba;
}

它抛出:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1001101
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Konwersja.liczbaF(Konwersja.java:30)
at Main.main(Main.java:10)

如果有任何帮助,我将不胜感激。 谢谢

【问题讨论】:

  • 你没有使用变量znak的内容,这段代码完整吗?

标签: java string parsing int parseint


【解决方案1】:

你的元素数组是 22 长:

 char element[] = new char[22];

但你只填写前 7 个元素:

 for(int i=1;i<8;i++)
    {
    element[i-1] = lancuch.charAt(i);
    }

所以字符串末尾有空字符,这使得它无法作为整数解析。 这样效果更好:

temp=String.valueOf(element,0,7);

我建议使用 StringBuilder 将字符添加到 String,而不是 char 数组。

【讨论】:

    【解决方案2】:

    NumberFormatException 的原因是元素数组的隐藏字符。元素数组的长度为 22,但仅由前几个字符填充。所以剩下的都是'\u0000'。一个简单的解决方案是: 修改这一行:

    temp=String.valueOf(element);
    

    到:

    temp=String.valueOf(element).trim();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多