Java:为什么你需要在浮点数中指定一个'f'?
为什么你需要在浮点数中指定一个后缀f
?
因为否则它默认为double
,这是比float
更常用的浮点types。
从Java语言规范的第3.10.2节 :
如果后缀为ASCII字母F或f,则浮点types为floattypes; 否则它的types是双精度型的,可以select用ASCII字母D或d(§4.2.3)作为后缀。
(就个人而言,我宁愿没有违约,在所有情况下都要说清楚,但这是另外一回事。)
由于未定义的浮点文字是双精度的,四舍五入就意味着即使是小文字在四舍五入浮点数和双精度时也可以采用不同的值。 这可以在下面的例子中看到:
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");
有两个浮点types可以表示为例如100.0
。 只有一个可能是默认的。 由于精度有限,漂浮是一个非常专业的types。 正常情况是双倍的,所以这是合适的默认值。
在现代处理器上,float和double具有相似的计算性能。 使用浮点数的唯一情况是在需要有限精度的性能危急情况下的大数组。 使用浮点数可以使适合一个caching行的浮点数的数量加倍。 即便如此,计算float是否为给定的计算提供了足够的精度也不是微不足道的。