为什么在浮点数字面量中需要指定后缀f
?
为什么在浮点数字面量中需要指定后缀f
?
double
,这是比float
更常用的浮点类型。(个人而言,我希望没有默认值,在所有情况下都清晰明了,但这是另一回事。)如果浮点字面量后缀为ASCII字母F或f,则其类型为float;否则它的类型为double,并且可以选择使用ASCII字母D或d作为后缀(§4.2.3)。
float
字面量并将其分配给double
变量。在大多数情况下,表达式的类型与其使用的上下文无关。(有一些情况下,泛型的类型是推断出来的,但那是一个特殊情况。) - Jon Skeetfloat f = 1.0;
,即使1.0
是一个double类型。我猜这是被支持的,因为它是明确无误的 - 不像使用带有方法调用的字面量,例如。 - McDowellfloat f = 1.0;
不可编译之外。你需要一个显式转换:float f = (float) 1.0;
。 - aioobe由于未加后缀的浮点型字面量是双精度类型,而舍入意味着即使小字面量被舍入为float和double时也可能具有不同的值。可以在以下示例中观察到这一点:
float f = (float) 0.67;
if(f == 0.67)
System.out.print("yes");
else
System.out.print("no");
这将输出no
,因为当0.67四舍五入为浮点数时,其值与四舍五入为双精度浮点数时不同。 另一方面:
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");
…输出Not Equal
。
100.0
。只有一种可以作为默认值。由于其精度有限,float是一种极其专业化的类型。通常情况下使用double,因此它是适当的默认值。