2012-01-05 70 views
-1

嗨我試圖做一些計算單位轉換器即時通訊創建和絆倒了一個問題。long類型的字面量超出範圍

out10 = doubleInput/94605284000000000000000L; 

Eclipse中說:「字面型長超出範圍」,我甚至不認爲這是可能的,但也許有些F你知道如何解決它?

+0

你爲什麼不認爲這是可能的?你相信多頭有無限大小? long在Java中是64位有符號整數。 – 2012-01-05 01:19:11

+0

因爲我不是習慣使用長雙,我不知道做他們的最大值和最小值的,總要過去 – 2012-01-05 01:24:09

回答

3

你可以把它的雙重文本,而不是一個長期的文字,具有精度的一些損失。假設doubleInput也是雙倍,並且輸出也是如此,那麼沒有理由不這樣做。如果你需要一個非常精確的大整數常量,使用一個bignum(谷歌它)。

+0

我如何去從長字面改變這雙重文本使用int或真正的數據類型,因爲輸出和doubleInput都是雙打的? – 2012-01-05 01:15:50

+2

刪除L並添加一個小數點。你也可以在java中像'9.46e20D'那樣格式化一個雙重字面值,其中20是科學記數法中該數字的指數。 – Dan 2012-01-05 01:18:17

+0

94605284000000000000000d是一個雙字面 – 2012-01-05 01:18:46

4

類型long無法容納這麼大的價值。我建議你嘗試輸入BigDecimal,它可以保存任意大小的值。

new BigDecimal("94605284000000000000000") 應該工作。

1

在這種情況下,基本上有涉及兩個步驟:

  • 解析文字爲有效的值與用於該文本類型(int在您的示例)。
  • 將該值轉換爲目標類型。

請參見下面的表達式。

int z = (int) 2147483647; //Compiles. 
int a = (int) 2147483648; //Doesn't compile, because the literal `2147483648` is outside the range of `int`. 
int b = (int) 2147483648L; //Compiles. 

在您的例子,out10 = doubleInput/94605284000000000000000L;,編譯器首先假定字面94605284000000000000000作爲int類型是外的int(從-2147483648到2147483647)的有效範圍。因此,它發出編譯器錯誤。