簡體   English   中英

我正在嘗試將int轉換為BigInteger,有人可以幫助我嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM