我不知道为什么在Java或其他语言的float值后面放置f或F?例如,
float fVariable = 12.3f;
除了表明这是一个浮点值以外,还有其他功能吗?
Answers:
默认情况下12.3
是double
文字,因此要告诉编译器将其float
显式对待->它使用f
或F
看到程序中表示数字的方式太多了,Java的设计人员不得不挑选每种形式并将其分配给最常见的用例。对于默认选择的那些表格,表示确切类型的后缀是可选的。
因此,当您键入12
程序时,多数民众赞成在一个int文字,而不是12L
,这是一个long。当您键入时12.3
,多数民众赞成在一个双精度字面量,而不是12.3F
,这是一个float。
那么这在哪里呢?主要用于处理垂头丧气或缩小转换范围。每当将long转换为int或将double转换为float时,都存在数据丢失的可能性。因此,编译器将通过发出类似以下内容的编译错误来迫使您指示您确实要执行缩小转换:
float f = 12.3;
由于12.3代表双精度型,因此您必须将其显式转换为浮点型(基本上在缩小转换上签字)。否则,可以通过使用正确的后缀来表明该数字实际上是一个浮点数。
float f = 12.3f;
因此,总而言之,必须为长整型和浮点型指定一个后缀是语言设计人员选择的一种折衷方案,以便平衡指定确切数字的需求以及将数字从一种存储类型转换为另一种存储类型的灵活性。
d
是double
某种数值形式的最佳表示形式x
,float f=(float)d
也将最接近float
于每万亿分之一内的某个值x
,即使它需要进行类型转换。相反,如果f
是float
某个数值的最佳表示形式x
,double d=f
则即使它通常与最佳double
表示形式相差甚远x
,并且可能相差数百个数量级,也不需要进行类型转换。我觉得具有讽刺意味的是float f=(float)(1.0/10.0)
需要演员,但double d=1.0f/10.0f
不是。
float
并且double
只能提供某些值的近似表示值。例如12.3或0.1
区别在于浮点数不那么精确(因为浮点数较小,因此精度较低)
例如
System.out.println("0.1f == 0.1 is " + (0.1f == 0.1));
System.out.println("0.1f is actually " + new BigDecimal(0.1f));
System.out.println("0.1 is actually " + new BigDecimal(0.1));
版画
0.1f == 0.1 is false
0.1f is actually 0.100000001490116119384765625
0.1 is actually 0.1000000000000000055511151231257827021181583404541015625
因此,0.1
在最近的表现double
,并0.1f
在最近的表现float
float fVariable = 12.3; 很好 但是,当您在任何表达式中仅使用浮点值(不带任何标识符)时,您需要告诉编译器该值是浮点的,因此在值之后使用后缀“ f”。例
浮动fl = 13f / 5f;
这里13和5是浮点值。
在Java中,我们有许多不同的基本变量类型,因此为了使其通用,它具有一些默认功能。就像我们输入16.02一样,它会自动将其作为双输入。因此,如果您想将其指定为浮点数,我们会在数字后面提及“ f”,或者我们可以简单地使用:
float f = (float) 16.02;
要么
float f = 16.02f;
同样,如果我们希望将数字保存为长类型,则必须提到16 l,否则它将自动选择默认类型,即int类型。
如果不使用f,它将被解释为double,这是Java中的默认值。您也可以这样写##
float f=(float) 32.5956;
float f=32.5956f;