![](/img/trans.png)
[英]I'm Trying To Render A Blue Square In Java But I Am Getting A IllegalStateException Error. Can Someone Help Me?
[英]I'm trying to convert int to BigInteger can someone help me?
我正在嘗試制作一個將值轉換為位的程序。 一切正常,直到我達到GB(GB)。 因此,例如1 GB應該等於80億位,但結果卻給了我一個否定的答案。 這是我的代碼,有人可以給我一些啟示嗎?
else if(line.equals("GB")) {
Scanner num = new Scanner(System.in);
System.out.println("How many GigaBytes are you transfering to bits?");
int number = num.nextInt();
//int ans = number * 8 * 1000000000;
BigInteger bigAns = BigInteger.valueOf(number * 8 * 1000000000);
System.out.println(number + " GigaByte(s) equals " + bigAns + " bits.");
}
這是我得到的輸出:1 GB等於-589934592位。
在整個計算過程中使用BigInteger
並不是一件壞事。 這樣,在將這些數字相乘時,您不會冒溢出的風險。
BigInteger bigAns = BigInteger.valueOf(number).multiply(BigInteger.valueOf(8))
.multiply(BigInteger.valueOf(1000000000L));
您得到一個負數,因為您超出了有符號的32位整數的最大可能值,並導致溢出。
當處理這樣的大數時,應該改用long
,它可以容納更大的數。
為此, int ans = number * 8 * 1000000000
更改為long ans = number * 8 * 1000000000l
您得到的答案是垃圾值。 您可以這樣做,將int轉換為BigInteger:
BigInteger bi = BigInteger.valueOf(myInteger.intValue());
正如Bohsulav所說:
您可以使用此數字* 8 * 1000000000l來防止溢出。
有幫助嗎 讓我知道 :)
首先轉換為biginteger, 然后執行計算。
BigInteger.valueOf(number * 8 * 1000000000);
在這里,您以int進行計算,然后為時已晚 ,然后轉換為BigInteger。
使用BigInteger.valueOf(number),然后調用適當的方法來執行計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.