我不知道为什么在Java或其他语言中浮点值之后放置f或F?例如,
float fVariable = 12.3f;
除了表明这是浮点值以外的任何其他功能吗?
答案 0 :(得分:56)
默认情况下12.3
为double
字面值,因此告诉编译器明确将其视为float
- >它使用f
或F
答案 1 :(得分:48)
看到在程序中只有很多方法来表示数字,Java的设计者不得不挑选并将每个表单分配给最常见的用例。对于那些默认选择的表单,表示确切类型的后缀是可选的。
因此,当您在程序中键入12
时,那就是 int 文字,而不是12L
,这是 long 。
当您输入12.3
时,那就是 double 字面值,而不是12.3F
,这是 float 。
那么这与哪些相关?主要用于处理向下倾斜或缩小转换。无论何时将long转换为int,或将double转换为float,都存在数据丢失的可能性。因此,编译器会强制您通过发出类似这样的编译错误来指示您 真正 想要执行缩小转换:
float f = 12.3;
因为12.3代表一个double,你必须明确地将它转换为float(基本上在缩小转换时签名)。否则,您可以通过使用正确的后缀来指示该数字实际上是浮点数;
float f = 12.3f;
总结一下,必须为 longs 和 floats 指定后缀是语言设计者选择的一种妥协,以便平衡指定究竟是什么数字的需要是的,具有将数字从一种存储类型转换为另一种存储类型的灵活性。
答案 2 :(得分:23)
float
和double
只能为某些值提供近似表示值。例如12.3或0.1
不同之处在于浮点数不准确(因为它的精度较低,因为它较小)
e.g。
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
中最接近的代表
答案 3 :(得分:4)
float fVariable = 12.3;很好。但是当你在任何表达式中只使用float值(没有任何标识符)时,你需要告诉编译器值是float,因此我们在value之后使用后缀“f”。示例
float fl = 13f / 5f;
这里13和5是浮点值。
答案 4 :(得分:1)
在编译期间,所有浮点数(带小数点的数字)默认为加倍。
因此,如果您不希望您的数字加倍并且只想将其作为浮点数,则必须通过添加 f 或 F 在文字常量的末尾。
答案 5 :(得分:1)
在Java中,我们有许多不同的基本变量类型,因此为了使其通用,它具有一些默认功能。就像我们输入16.02一样,它会自动将其作为双输入。因此,如果您想将其指定为浮点数,我们会在数字后面提及'f',或者我们可以简单地使用:
float f = (float) 16.02;
或
float f = 16.02f;
以同样的方式,如果我们希望将数字保存为长类型,则必须提及16 l ,否则它将自动选择默认类型,即int类型。
答案 6 :(得分:0)
Float是单精度32位IEEE 754浮点数,Double是双精度64位IEEE 754浮点数。当您使用带小数点的值时,如果您没有指定为0.23f(特别是浮点数),则java将其标识为double。
对于十进制值,double数据类型通常是java采用的默认选择。 Check This
答案 7 :(得分:0)
如果不使用f,它将被解释为double,这是Java中的默认设置。 您也可以这样写##
float f=(float) 32.5956;
float f=32.5956f;