为什么需要在float文字中指定后缀f
?
答案 0 :(得分:49)
因为否则默认为double
,这是比float
更常用的浮点类型。
来自Java Language Specification, section 3.10.2:
浮点文字的类型为float,如果后缀为ASCII字母F或f;否则其类型为double,并且可以选择以ASCII字母D或d为后缀(§4.2.3)。
(就我个人而言,我宁愿没有默认,在所有情况下都要说清楚,但这是另一回事。)
答案 1 :(得分:32)
因为未填充的浮点文字是双倍的,并且舍入意味着即使是小文字在舍入为float和double时也可以采用不同的值。这可以在以下示例中观察到:
float f = (float) 0.67;
if(f == 0.67)
System.out.print("yes");
else
System.out.print("no");
这将输出no
,因为当舍入为浮点数时,0.67具有与舍入为double时不同的值。另一方面:
float f = (float) 0.67;
if(f == 0.67f)
System.out.print("yes");
else
System.out.print("no");
...输出yes
。
修改强>
第二个例子:
if(0.67 == 0.67f)
System.out.print("Equal");
else
System.out.print("Not Equal");
答案 2 :(得分:5)
有两种浮点类型可以表示为例如100.0
。只有一个可能是默认值。由于其精度有限,浮动是一种非常专业的类型。正常情况是双重的,因此它是适当的默认值。
在现代处理器上,float和double具有类似的计算性能。使用float的唯一情况是在需要有限精度的性能关键情况下使用大型数组。使用float会使适合一个缓存行的浮点值的数量加倍。即使这样,确定浮点数是否能给出给定计算的足够精度也很少。