Java - int/long,float/double

问题描述:

我明白“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

请纠正我,如果有什么不对的地方,并回答我的问题。

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

首先,12是int。由于您没有指定类型,因此编译器会假定为int,就像您未指定2.5的类型时一样,它假定为double

分配

long x = 12; 

因为没有精度损失时,编译器隐upcasts字面int值12到long编译就好了。

我总是尝试使用大写的类型说明符,如2.5F和12L,只是因为它们更易于阅读。 1和l在我喜欢的等宽字体中看起来差不多。

如果您在申报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

注意的是,虽然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