为什么f被放置在float值之后?

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

float fVariable = 12.3f; 

除了表明这是一个浮点值以外的任何特性?

默认情况下12.3double字面的,所以告诉编译器把它当作float显式 – >它使用f或者F

看到在程序中只有很多方法来表示一个数字,Java的devise者不得不挑选和分配每个表单到最常见的用例。 对于默认select的表单,表示确切types的后缀是可选的。

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

所以,当你在你的程序中键入12时,这是一个int字面量,而不是12L ,这是一个 。 而当你键入12.3 ,这是一个双重字面,而不是12.3F ,这是一个浮动

那么这有什么相关的? 主要处理downcasts,或缩小转换。 无论何时你把一个long down到一个int,或者一个double float,都会存在数据丢失的可能性。 所以,编译器会强制你指出你真的想要执行缩小转换,通过发出一个编译错误,例如:

 float f = 12.3; 

因为12.3代表一个double,所以你必须明确地把它转换成一个float(基本上是缩小转换)。 否则,您可以通过使用正确的后缀来指示该数字实际上是一个浮点数;

 float f = 12.3f; 

总而言之,为了平衡指定具体数字的需要,以及将数字从一种存储types转换为另一种存储types的灵活性,必须指定长整型浮点型后缀是语言devise者select的一种折中scheme。

floatdouble只能提供某些值的近似表示值。 例如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是最接近的表示法, 0.1f是最接近的表示法

float fVariable = 12.3; 很好。 但是当你在任何expression式中只使用浮点值(没有任何标识符)时,你需要告诉编译器该值是浮点数,因此我们在值后面使用后缀“f”。 例

float fl = 13f / 5f;

这里13和5是浮点值。

在编译过程中,所有浮点数(带小数点的数字)默认为double。

因此,如果你不希望你的数字加倍,只是想把它作为浮点数,你必须通过在文字常量末尾添加一个fF来明确地告诉编译器。

Float是单精度32位IEEE 754浮点,Double是双精度64位IEEE 754浮点。 当你使用一个带有小数点的值,如果你不指定为0.23f(特别是float),那么java将它标识为double。

对于十进制值,double数据types通常是java采用的默认select。 选中此项