在Java中将二进制转换为十进制

时间:2013-02-09 19:10:34

标签: java binary decimal

我差不多完成了一个代码,该代码允许用户将十进制数输入二进制数,然后将二进制数反转,然后转换回十进制数。

我解决了除Binary到小数部分之外的所有内容。无论我输入什么,它都会一遍又一遍地给我相同的数字。我不明白为什么。基本上,为什么我的代码的最后一部分错了?我找不到数组/字符串的长度然后将它乘以2 ^ n等...

2 个答案:

答案 0 :(得分:0)

根据您的do-while循环条件,

number始终为零或更少:while(number>0);

这会导致您的变量s(请选择更好的变量名称...)始终为“0”。

我认为你可以弄清楚其余部分。

答案 1 :(得分:0)

此代码中存在两个问题。

1)您没有存储十进制到二进制转换的结果。您应该引入新的String变量来存储具有反向二进制值的字符串。

2)您的二进制到十进制算法不正确。 s.charAt(i)返回char值,但您需要double值才能在计算中使用它。 Math.pow(2,(s.length() - i - 1))也是不正确的 - 据我所知,它是针对非反转二进制值的。

固定版本的代码应如下所示:

public static void main(String[] args) {
    int a[] = {0, 1};

    int number;
    int remainder;
    String binary = "";

    Scanner in = new Scanner(System.in);

    System.out.print("Enter Decimal Number: ");
    number = Integer.parseInt( in.next());

    System.out.print("Binary Number in Reverse: ");
    do {
        remainder=number%2;
        if(remainder > 0){
            binary += a[1];
            //System.out.print(a[1]);
        }
        else{
            binary += a[0];
            //System.out.print(a[0]);
        }
        number=number / 2;
    } while(number>0);

    System.out.print(binary);

    System.out.print(" \nDecimal number: ");
    //String s = Integer.toString(number);
    double result = 0;
    for (int i = 0; i < binary.length(); i++)
       result = result + Double.parseDouble(binary.substring(i, i + 1)) * Math.pow(2, i);
    System.out.print(result);
}