引发Java.lang.NumberFormatException

引发Java.lang.NumberFormatException,java,debugging,types,hex,long-integer,Java,Debugging,Types,Hex,Long Integer,我正试图写一个程序,将正二进制输入转换成十六进制。 为什么在编译二进制到十六进制转换器时会出现此错误 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

我正试图写一个程序,将正二进制输入转换成十六进制。 为什么在编译二进制到十六进制转换器时会出现此错误

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);
    }   
}

很抱歉提出这样的问题-
确实需要帮助。

Long.parseLong将字符串参数解析为带符号的Long。148.0是双精度的

您在if语句中使用强制转换,但不是在之后:

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);

你已经在else声明的后面做了,你只是错过了上面的内容。我认为这段代码中还有其他问题,但这应该可以回答最初的问题。

这不是编译器错误。字符串148.0不能解析为Long。为什么不能解析为Long?这个问题的解决办法是什么@Sotiriosdelimanolis您应该检查数字和数字基元类型。告诉我怎么做@索蒂里奥斯德里曼努利斯酒店
if ((long)tempDec == tempDec) {
    tempDecString = String.valueOf((long)tempDec);
    templongDec = Long.parseLong(tempDecString, 10);