关于java:为什么f放在浮点值之后?

why f is placed after float values?

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

1
float fVariable = 12.3f;

除了指示这是一个浮点值之外还有其他功能吗?


默认情况下,12.3double文字,因此要告诉编译器显式地将其视为float->它使用ff


由于在程序中只有这么多的方法来表示一个数字,所以Java设计者必须选择并将每个窗体分配给最常用的用例。对于那些默认选择的表单,表示确切类型的后缀是可选的。

  • 对于整型文本(int,long),默认值为int。对于明显的原因。
  • 对于浮点文本(float,double),默认值为double。因为使用double可能会使存储值。

所以,当您在程序中键入12时,这是一个int文本,而不是12L,它是一个长文本。当你输入12.3时,这是一个双字,而不是12.3F是一个浮点。

那么这与什么相关呢?主要用于处理向下转换或缩小转换。每当您将long向下转换为int,或将double向下转换为float时,就存在数据丢失的可能性。因此,编译器将强制您通过如下方式发出编译错误信号来指示您确实想要执行收缩转换:

1
float f = 12.3;

因为12.3表示一个双精度数,所以必须将其显式转换为一个浮点数(基本上是在缩小转换上签名)。否则,您可以通过使用正确的后缀来指示数字实际上是一个浮点数;

1
float f = 12.3f;

因此,总结一下,必须为long和float指定一个后缀是语言设计者选择的折衷办法,以便平衡指定确切数字的需要,以及将数字从一种存储类型转换为另一种存储类型的灵活性。


floatdouble只能为某些值提供近似的表示值。例如12.3或0.1

不同的是,浮点数没有那么精确(因为它的精度较低,因为它较小)

例如

1
2
3
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));

印刷品

1
2
3
0.1f == 0.1 is false
0.1f is actually 0.100000001490116119384765625
0.1 is actually 0.1000000000000000055511151231257827021181583404541015625

因此,0.1double中最接近的表示,0.1ffloat中最接近的表示。


浮动变量=12.3;很好。但是,当您在任何表达式中只使用浮点值(没有任何标识符)时,您需要告诉编译器值是浮点值,因此我们在值后使用后缀"f"。例子

浮球FL=13F/5F;

这里13和5是浮点值。


在Java中,我们有许多不同的基本变量类型,所以为了使其通用,它具有一些默认特性。就像如果我们给一个输入16.02,它会自动把它作为一个双输入。因此,如果您想将其指定为float,我们会在数字后面提到"f",或者我们可以简单地使用:

float f = (float) 16.02;

float f = 16.02f;

同样地,如果我们希望将数字保存为长类型,则必须提到16L,否则它将自动选择默认类型ie int type。


编译期间,所有浮点数字(带小数点的数字)默认为双精度。

因此,如果不希望数字加倍,只希望它是浮点型的,则必须通过在文本常量末尾添加f或f来显式地告诉编译器。


浮点是单精度32位IEEE754浮点,双精度64位IEEE754浮点。当使用小数点的值时,如果不指定为0.23(特别是浮点),Java将其标识为双。

对于十进制值,双数据类型通常是Java所采用的默认选择。检查这个