在Java意外输出中将二进制/十进制小数转换为十六进制

提亚什

我正在尝试编写一个将二进制(带或不带分数)输入转换为十六进制的程序,这几乎完成了,但是不幸的是,在十六进制输出"."中缺少点()。

假设我的预期输出是e7.6,但是我正在获取e76

"."缺少。

这是我的BinToHex类。

import java.io.*;

//tried to convert the binary into dec and then dec to hex
public class BinToHex {
    double tempDec,fractionpart;
    long longofintpart,templongDec;
    String inpu ="11100111.011";
    String hexOutput=null,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 (tempDec == (int)tempDec) {
                        tempDecString = String.valueOf((long)tempDec);
                        templongDec = Long.parseLong(tempDecString, 10);
                        hexOutput = Long.toHexString(templongDec);

                        break;
                    } else {
                        longofintpart  = (long)tempDec;
                        hex=Long.toHexString(longofintpart);
                        if(i==1){
                            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();    
    }
}

我被卡住了!请帮助。

提亚什

最后找到了一种将小数(带或不带小数)转换为十六进制的合适算法。

此外,Java中的二进制(带或不带小数)到小数的位置在这里

Java中将十进制(带或不带小数)转换为十六进制的算法

import java.math.*; 

public class DecimalToHex{
    public String decimalToHex(String decInpString){

        StringBuilder hexOut = new StringBuilder();
        double doubleOfDecInp = Double.parseDouble(decInpString);

        if(doubleOfDecInp < 0){

            hexOut = hexOut.append("-");
            doubleOfDecInp = -doubleOfDecInp;
        }

        BigInteger beforedot = new BigDecimal(doubleOfDecInp).toBigInteger();
        hexOut.append(beforedot.toString(16));

        BigDecimal bfd =new BigDecimal(beforedot);
        doubleOfDecInp = doubleOfDecInp - bfd.doubleValue();

        if(doubleOfDecInp == 0){
            return hexOut.toString();
        }
        hexOut.append(".");

        for (int i = 0; i < 16; ++i) {
            doubleOfDecInp = doubleOfDecInp * 16;
            int digit = (int)doubleOfDecInp;

            hexOut.append(Integer.toHexString(digit));

            doubleOfDecInp = doubleOfDecInp - digit;

            if (doubleOfDecInp == 0)
                break;
        }

        return hexOut.toString();
    }

    public static void main(String args[]){

        String decimalInp = "-0.767";
        String out ; 
        DecimalToHex i = new DecimalToHex();
        out = i.decimalToHex(decimalInp);
        System.out.println(out);    

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Shell脚本中将十进制数转换为十六进制和二进制

来自分类Dev

十进制<->二进制补码<->十六进制转换

来自分类Dev

在Swift中在十进制,二进制和十六进制之间转换

来自分类Dev

十进制转换为2-16的基数(二进制到十六进制)

来自分类Dev

如何使用二进制补码手动将十六进制转换为十进制

来自分类Dev

在Java中将大二进制字符串转换为十进制

来自分类Dev

在 Swift 中将十六进制转换为十进制

来自分类Dev

从十六进制转换为二进制值

来自分类Dev

Python二进制转换为十六进制

来自分类Dev

将十六进制转换为二进制

来自分类Dev

将十六进制转换为二进制

来自分类Dev

将二进制转换为十六进制

来自分类Dev

将十六进制转换为二进制

来自分类Dev

将十六进制转换为二进制

来自分类Dev

在JAVA中将十六进制转换为十进制并将十进制转换为时间戳

来自分类Dev

Perl十进制转换为二进制

来自分类Dev

十进制转换为二进制

来自分类Dev

十进制小数转换为二进制-如何转换0.1?

来自分类Dev

二进制,十六进制,十进制比较

来自分类Dev

C中的二进制到十进制和十六进制

来自分类Dev

在 C 中将十进制转换为二进制时遇到问题。没有输出

来自分类Dev

是否有一种算法可以将十六进制的二进制补码手动转换为十进制?

来自分类Dev

是否有一种算法可以将十六进制的二进制补码手动转换为十进制?

来自分类Dev

如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

来自分类Dev

在Python中将ASCII数据转换为十六进制/二进制/字节

来自分类Dev

在node.js中将二进制转换为十六进制

来自分类Dev

在Python中将ASCII数据转换为十六进制/二进制/字节

来自分类Dev

在qt中将十六进制转换为二进制

来自分类Dev

如何在 Batch 或 Powershell 中将二进制转换为十六进制?

Related 相关文章

  1. 1

    在Shell脚本中将十进制数转换为十六进制和二进制

  2. 2

    十进制<->二进制补码<->十六进制转换

  3. 3

    在Swift中在十进制,二进制和十六进制之间转换

  4. 4

    十进制转换为2-16的基数(二进制到十六进制)

  5. 5

    如何使用二进制补码手动将十六进制转换为十进制

  6. 6

    在Java中将大二进制字符串转换为十进制

  7. 7

    在 Swift 中将十六进制转换为十进制

  8. 8

    从十六进制转换为二进制值

  9. 9

    Python二进制转换为十六进制

  10. 10

    将十六进制转换为二进制

  11. 11

    将十六进制转换为二进制

  12. 12

    将二进制转换为十六进制

  13. 13

    将十六进制转换为二进制

  14. 14

    将十六进制转换为二进制

  15. 15

    在JAVA中将十六进制转换为十进制并将十进制转换为时间戳

  16. 16

    Perl十进制转换为二进制

  17. 17

    十进制转换为二进制

  18. 18

    十进制小数转换为二进制-如何转换0.1?

  19. 19

    二进制,十六进制,十进制比较

  20. 20

    C中的二进制到十进制和十六进制

  21. 21

    在 C 中将十进制转换为二进制时遇到问题。没有输出

  22. 22

    是否有一种算法可以将十六进制的二进制补码手动转换为十进制?

  23. 23

    是否有一种算法可以将十六进制的二进制补码手动转换为十进制?

  24. 24

    如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

  25. 25

    在Python中将ASCII数据转换为十六进制/二进制/字节

  26. 26

    在node.js中将二进制转换为十六进制

  27. 27

    在Python中将ASCII数据转换为十六进制/二进制/字节

  28. 28

    在qt中将十六进制转换为二进制

  29. 29

    如何在 Batch 或 Powershell 中将二进制转换为十六进制?

热门标签

归档