2014-09-29 41 views
0

我想写一个程序,将积极的二进制输入转换为十六进制。 为什么会出现这样的错误,而我的编译二进制到十六进制转换器..Java.lang.NumberFormatException异常抛出

Exception in thread "main" java.lang.NumberFormatException: For input string: "148.0" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Long.parseLong(Long.java:441) 
at BinToHex.convertbintohex(BinToHex.java:24) 
at Test.main(Test.java:4) 

这里是我BinToHex类

import java.io.*; 


public class BinToHex { 
    double tempDec,fractionpart; 
    long longofintpart,templongDec; 
    String inpu ="1001.01"; 
    String hexOutput,intpart,tempDecString,hex = null; 

    static int i = 1; 

    public void convertbintohex() { 

     if (inpu.contains(".")) { 
      int placesAfterPoint = inpu.length() - inpu.indexOf(".") - 1;//every thing 
      long numerator = Long.parseLong(inpu.replace(".", ""), 2);//goes 
      double decimalOfInput = ((double) numerator)/(1L << placesAfterPoint);//alright till here 


      while (true) { 
       tempDec = decimalOfInput * 16; 
       if ((int)tempDec == tempDec) { 
        tempDecString = String.valueOf(tempDec); 
        templongDec = Long.parseLong(tempDecString, 10); 
        hexOutput = Long.toHexString(templongDec); 

        break; 
       } else { 
        intpart = String.valueOf((long)tempDec); 
        longofintpart = Long.valueOf(intpart).longValue(); 
        if(i==1){ 
         hex=Long.toHexString(longofintpart); 
         hexOutput = hex + "."; 
         i=i+1; 
        }else{ 
         hexOutput = hexOutput + hex; 
        } 
        fractionpart = tempDec-(int)tempDec; 
        decimalOfInput = fractionpart; 
       } 
      } 
     } else { 
       // this part is ok 
      tempDecString = String.valueOf(Integer.parseInt(inpu, 2)); 
      templongDec = Long.parseLong(tempDecString, 10); 
      hexOutput = Long.toHexString(templongDec); 
     } 
     System.out.println(hexOutput); 
    } 

}

和我的测试类..

public class Test{ 
public static void main(String args[]){ 
    BinToHex i = new BinToHex(); 
    i.convertbintohex();  
} 

}

对不起,这样的问题;-) 真正需要帮助的

+1

这不是一个编译器错误。 – 2014-09-29 14:40:48

+3

String'148.0'不能被解析为'Long'。 – 2014-09-29 14:41:07

+0

为什么不能将字符串解析成长整型?这是什么解决方案? @SotiriosDelimanolis – Tiash 2014-09-29 14:43:02

回答

0

的Long.parseLong“将字符串参数解析为签订长期一个”。 148.0是双倍的。

您使用的是铸在“如果”的声明,但不算账:

if ((int)tempDec == tempDec) { 
    tempDecString = String.valueOf(tempDec); 
    templongDec = Long.parseLong(tempDecString, 10); 

相反,尝试:

if ((long)tempDec == tempDec) { 
    tempDecString = String.valueOf((long)tempDec); 
    templongDec = Long.parseLong(tempDecString, 10); 

你已经这样做,后来在别人声明,你只是错过了上面。我认为在这段代码中还有其他问题,但这应该回答原来的问题。