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

时间:2013-09-05 19:01:00

标签: java

我需要编写一个可以将位转换为十进制的程序。每当我输入一点,它只输出0.0。我无法弄清楚为什么。我知道它非常简单,但我只是没有看到它。任何帮助将不胜感激。

import java.lang.Math;
import java.util.Scanner;


public class Lab1 {
    static double number = 0;

    public static double toDec(String num) {

        char[] charArray = num.toCharArray();

        for(int i = 0; i<charArray.length;i++) {
            if(charArray[i] == 1) {
                number = Math.pow(2, charArray.length-i);
            }
        }

        return number;


    }


    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int bit;
        String bitString;

        System.out.println("Please enter a bit");
        bit = keyboard.nextInt();
        bitString = Integer.toString(bit);


        System.out.println(toDec(bitString));



    }

}

3 个答案:

答案 0 :(得分:6)

您已将charArray[i]1进行了比较,但您将苹果与橙子进行比较,特别是charint

与char '1'比较。

if(charArray[i] == '1') {

另外,您可以在number中将toDec作为局部变量;它不需要存在于该方法之外。

此外,这仅在设置了一位时有效。现在你正在使用一个bitonly,但如果你想修改它以使用多个位,则需要进行另一个更改。

每次调用number并且条件为toDec时,您都会覆盖true。您可能希望使用number添加+=,而不是使用=覆盖之前的值。

答案 1 :(得分:1)

Integer#parseInt(String str, int radix)完成工作:

public static Integer toDec(String num) {
  return Integer.parseInt(num, 2);
}

答案 2 :(得分:0)

因此,如果你想取字符串“110011”,这是51.对于big-endian,你将不得不确定要处理多少位。因此,如果您读取字符串并且它长度为6位,那么您就知道第一位必须向左移动6位。

int l = 6;
long value = 0;

for( int i = 0; i < l; i++ )
{
   int bit = ( charArray[i] == "1" ) ? 1 : 0;

   l = l + ( bit << l-i );
}

对于float你基本上必须构建一个解释器来解码这些位,但浮点数用二进制表示。