本文介紹了Java:為什么我不能用科學記數法聲明整數類型?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我可以很容易地一目了然地將2e15
讀成”兩千萬億”,但對于2000000000000000
,我必須計算零,這需要更長的時間,可能會導致錯誤。
為什么不能使用文字聲明int
或long
,如2e9
或1.3e6
?我知道10的負冪(如2e-3
)或小于小數位數的10的冪(如1.0003e3
)會產生浮點數,但為什么Java不允許這樣的聲明,而只是截斷浮點部分,并在結果值不是整數的情況下發出溫和警告?
這是一個糟糕的主意,有沒有技術原因,或者這完全是類型安全的問題?對于編譯器來說,簡單地解析像
這樣的語句不是很簡單嗎
long x = 2e12
ASlong x = 2000000000000 //OK for long
和int y = 2.1234e3
ASint y = 2123.4 //warning: loss of precision
推薦答案
因為當您使用科學記數法時,您將創建a floating point number(在您的示例中為雙精度)。并且不能將浮點賦給整數(這將是縮小基元轉換,which is not a valid assignment conversion)。
因此這也不起作用,例如:
int y = 2d; //can't convert double to int
您有幾個選項:
將浮點顯式轉換為整數:int y = (int) 2e6;
在Java 7+中使用千分隔符:int y = 2_000_000;
這篇關于Java:為什么我不能用科學記數法聲明整數類型?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,