2017-06-04 259 views
0

我想从二进制数字使用BigInteger类打印十进制数。 我使用BigInteger类的BigInteger(String val,int radix)构造函数将给定的二进制值转换为十进制值,但它正在打印在构造函数中传递的确切二进制值.Waht是错误吗? 的代码如下:如何使用BigInteger将二进制转换为十进制?

System.out.print("Ente the decimal number:"); 
s=String.valueOf(sc.nextInt()); 

BigInteger i=new BigInteger(s,10); 
System.out.println(i); 
+0

如果您尝试将二进制转换为十进制,则可以使用'new BigInteger(s,2)'。如果你试图将十进制转换为二进制,你应该编辑这个问题。 –

+0

为什么?你为什么不使用'BigDecimal'? – EJP

回答

0

如果你试图解析输入字符串作为二进制,你应该写:

BigInteger i=new BigInteger(s,2); 

当你打印

System.out.println(i); 

它将默认显示为十进制。

但是,将数字读取为int然后转换为String并传递给BigInteger构造函数是没有意义的,因为这限制了可以工作的数字范围。

尝试:

s = sc.nextLine(); 
BigInteger i=new BigInteger(s,2); 
System.out.println(i); 
1

其实不打印二进制数的十进制值

要打印该值是String val

准确的十进制表示根据你把radix在本声明中,它将采取如下行动:

BigInteger i = new BigInteger("11101", 10); // 11101 

11101这个输出实际上是十进制数不是一个二进制数

为了获得预期的结果,你应该radix值更改为2后,它将打印二进制数的十进制值:

BigInteger i = new BigInteger("11101", 2); 
System.out.println(i); 

输出

29 
0

为了解析二进制输入,使用Scanner.nextBigInteger()以2为基数:

System.out.print("Enter the decimal number:"); 
BigInteger i = sc.nextBigInteger(2); 
System.out.println(i); 

默认情况下输出为十进制。

相关问题