我正在使用java程序将4位二进制数转换为十进制数。我需要输入二进制文件作为字符串,转换为字符,然后转换为小数。我不能使用类似的东西:
int decimal = Integer.parseInt("1010", 2);
到目前为止,这是我的代码:
import java.util.Scanner;
public class BinaryConvert2 {
public static void main(String[] args){
System.out.println("Please enter a 4 digit binary number: ");
Scanner s = new Scanner(System.in);
String binaryNumber = s.next();
char a, b, c, d;
a = binaryNumber.charAt(0);
a = (char) (a*2*2*2);
b = binaryNumber.charAt(1);
b = (char) (b*2*2);
c = binaryNumber.charAt(2);
c = (char) (c*2);
d = binaryNumber.charAt(3);
d = (char) (d*1);
System.out.println(binaryNumber + " in decimal is: " + a + b + c + d);
}
}
我试图将char值乘以2的幂,以便它将转换为十进制,但是当我运行程序时,我会得到奇怪的答案,例如:
Please enter a 4 digit binary number:
1010
1010 in decimal is: ?Àb0
答案 0 :(得分:2)
0
的ascii(char)值为48,1
的值为49,
因此您需要从值
中减去48
a = binaryNumber.charAt(0);
int aInt = (a - 48) * 2 * 2* 2;
....
System.out.println(binaryNumber + " in decimal is: " + (aInt + bInt + cInt + dInt));
答案 1 :(得分:0)
问题是你正在打印a b c和d作为字符,因此它将打印bc和d中的十进制值对应于ascii表。如果要打印小数,则必须通过减去48将它们相加然后再打印,将值转换为十进制。
必须是这样的: 1010 = 8 + 0 + 2 + 0 = 10然后打印10.你在正确的轨道上
答案 2 :(得分:0)
获取数值并进行乘法,如果使用char,则将使用ASCII值
int num = 0;
a = binaryNumber.charAt(0);
num += (Character.getNumericValue(a) * 2 * 2 * 2);
b = binaryNumber.charAt(1);
num += (Character.getNumericValue(b) * 2 * 2);
c = binaryNumber.charAt(2);
num += (Character.getNumericValue(c) * 2);
d = binaryNumber.charAt(3);
num += (Character.getNumericValue(d) * 1);
System.out.println(binaryNumber + " in decimal is: " + num);