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