为什么f在浮动值之后放置?

时间:2012-03-17 07:26:37

标签: java floating-point

我不知道为什么在Java或其他语言中浮点值之后放置f或F?例如,

float fVariable = 12.3f;

除了表明这是浮点值以外的任何其他功能吗?

8 个答案:

答案 0 :(得分:56)

默认情况下12.3double字面值,因此告诉编译器明确将其视为float - >它使用fF

答案 1 :(得分:48)

看到在程序中只有很多方法来表示数字,Java的设计者不得不挑选并将每个表单分配给最常见的用例。对于那些默认选择的表单,表示确切类型的后缀是可选的。

  • 对于Integer文字(int,long),默认值为 int 。显而易见 的原因。
  • 对于浮点文字(float,double),默认值为 double 。 因为使用double可能允许更安全算术 储值。

因此,当您在程序中键入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)

floatdouble只能为某些值提供近似表示值。例如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.1double中最接近的代表,而0.1ffloat中最接近的代表

答案 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;