java - 在java中打印二进制数的十进制等价物

标签 java binary decimal

我的代码是打印用户输入的二进制数的十进制等价物。

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter a binary integer: ");
        int b=in.nextInt();
        int digits=1;
        int q=b;
        //determine the number of digits
        while(q/10>=1){     
            ++digits;
            q/=10;
        }
        System.out.println(digits);
        int decimal=0;
        int i=0;
        //pick off the binary number's digits and calculate the decimal equivalent
        while(i<=digits-1){
            decimal+=b/Math.pow(10,i)%10*Math.pow(2,i);
            i++;
        }           
        System.out.println(decimal);

    }

}

当我输入 1101 时,它输出 13,这是正确答案。然而,当我 测试数字 11001,十进制等效值应该是 25,但它输出 26。我试试 修复它但无法找到错误所在。你们能帮帮我吗?

最佳答案

问题是 Math.pow 返回一个 float ,而您却在进行浮点计算,而您认为自己在进行整数计算。当 i 为 4 时,您计算

b/Math.pow(10,i)%10*Math.pow(2,i);

计算是这样的:

b = 11001
b / Math.pow(10,i) = b / 10000 = 1.1001 (not 1)
1.1001 % 10 = 1.1001
1.1001 * Math.pow(2,i) = 1.1001 * 16 = 17.6016 (not 16)

当您将它添加到 decimal 时,它会被转换为 (int)。它将最后一个值截断为 17,但为时已晚。

Math.pow 结果转换为 (int) 将使其工作。但这无论如何都不是正确的方法。如果您想自己学习如何做而不是使用 parseInt,最好将数字输入为 String(请参阅我之前的评论),然后您就不需要无论如何,根本不必担心将这些位选为十进制数字或 10 的幂。即使使用您的方法,而不是 Math.pow,保留您用 powerOf10 修改的 powerOf10powerOf2 整数变量会更简单*= 10; powerOf2 *= 2; 在每个循环迭代中。

关于java - 在java中打印二进制数的十进制等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492470/

相关文章:

PHP - 小数点后位置的 floatval 削减?

java - 驱动程序 :com. mysql.jdbc.Driver@2b7374f8 为 URL 返回 null

java - SQLite - Java - onCreate 和 onUpgrade - Android

list - 在方案中将包含二进制数的列表转换为十进制和十六进制

go - 多个串行请求导致缓冲区为空

r - 使用大型数据集在 R 中创建二元矩阵

mysql - 使用 DECIMAL(31,0) 的原因

java - 从单独的方法中引用套接字

java - 在 Bash 中使用 Maven Exec 插件

Java - 当 radix=2 时,Integer.parseInt() 不返回负数