2009-08-31 106 views
3

我明白「2.5」是自動加倍的,爲了使它成爲一個浮點數,我需要做「2.5F」(或者應該是小寫嗎?),而且我應該使用一個浮點數,例如,如果我有一個常量,只需要2個小數位(例如「0.08F」用於安大略PST稅),但我不確定「12」是int還是long,但是我知道「12L」很長,但是「long l = 12」和「long l = 12L」似乎編譯成相同的東西,如果我想要最大的非浮點精度,我使用long,如果我知道我不會需要超出int的限制。Java - int/long,float/double

請糾正我,如果有什麼不對的地方,並回答我的問題。

回答

14

12作爲java中的常量是int。

long l = 12編譯的原因是它會自動擴展爲很長的。

編輯:關於您的評論,自動加寬沒有任何問題,使用任何使您的代碼更清晰的方法,但只要知道在對基元進行數學運算時會發生什麼。例如:

int i = 1213; 
long l = 112321321L * i; 

長將有一個非常不同的值,如果你沒有明確提出是第一個數字爲長因爲Java將其當作整數運算,並導致溢出。

+0

我應該把L放在哪裏,或者讓它自動加寬? – mk12 2009-08-31 18:59:57

+2

自動加寬沒有任何問題,請使用任何使您的代碼更清晰的方法。 – Yishai 2009-08-31 19:01:05

3

首先,12是int。由於您沒有指定類型,因此編譯器會假定爲int,就像您未指定2.5的類型時一樣,它假定爲double

分配

long x = 12; 

因爲沒有精度損失時,編譯器隱upcasts字面int值12到long編譯就好了。

我總是嘗試使用大寫的類型說明符,如2.5F和12L,只是因爲它們更易於閱讀。 1和l在我喜歡的等寬字體中看起來差不多。

7

如果您在申報float時使用小寫或大寫字母,這並沒有什麼不同。

...像 「0.08F」 安大略PST稅

如果您使用的是這些領域的貨幣,你應該考慮使用BigDecimal代替。 See this explanation及其與Sun有關的更多詳細信息。

+6

+1。請不要使用浮點數的貨幣,EVER – 2009-08-31 19:20:08

+0

在金融行業工作,爲金融機構編寫軟件,我同意。事實上,儘可能地避免雙打,即使在精度不重要的地方也是如此 - 除非我需要速度,我寧願有太多的精確度也不夠:) – aperkins 2009-08-31 19:50:39

+0

我使用不同的長整數來表示貨幣,但顯然我應該一直使用BigDecimal。 – mk12 2009-08-31 22:10:25

3

注意的是,雖然int文字將分配給一個long變量時自動擴大至long,你會表達值大於Integer.MAX_VALUE(2147483647)或小於Integer.MIN_VALUE(當需要使用一個明確的long文字 - 2147483648):

long x1 = 12; //OK 
long x2 = 2147483648; // not OK! That's not a valid int literal 
long x3 = 2147483648L; // OK