为什么在浮点数末尾使用字母f?

我只是想了解一些有关此事的信息。

float n = 2.99944323200023f 

文字末尾的f是做什么的? 这叫什么? 为什么用它?

f表示它是一个浮点字面值,而不是双字面值(它本来就是隐含的。)它没有我所知道的特定技术名称 – 如果我需要,我倾向于将其称为“字母后缀”具体是指它,虽然这有点武断!

例如:

 float f = 3.14f; //Compiles float f = 3.14; //Doesn't compile, because you're trying to put a double literal in a float without a cast. 

你当然可以这样做:

 float f = (float)3.14; 

…它完成了相同的东西,但F是一个更整洁,更简洁的方式来展示它。

为什么选择双重作为默认而不是浮动? 好吧,现在99%的情况下浮点数的内存要求不是问题,而且它们提供的额外准确性在很多情况下都是有益的 – 所以你可以说这是合理的默认值。

请注意,您也可以通过在末尾添加d来明确地将十进制文字显示为double:

 double d = 3.14d; 

…但是因为它无论如何都是双重值,这没有任何效果。 有些人可能会主张它提倡它更清楚你的意思是什么字面类型,但我个人觉得它只是杂乱的代码(除非你有很多浮动文字,你要强调这个文字确实意味着一个双重,遗漏f不仅仅是一个错误。)

Java将用于float变量的默认Java类型将是double。 所以,即使你将任何变量声明为float,编译器必须实际做的是为浮点变量赋一个double值,这是不可能的。所以,告诉编译器将这个值当作一个浮点数,即’f’用来。

在Java中,当您键入十进制数为3.6 ,其解释为doubledouble是64位精度IEEE 754浮点数,而float是32位精度IEEE 754浮点数。 由于float不如double精确,因此无法隐式执行转换。

如果你想创建一个浮点数,你应该用f结束你的数字(即: 3.6f )。

有关更多说明,请参阅Java教程的原始数据类型定义 。

它是为了区分浮点数和双精度数。 后者没有后缀。

你需要把’f’放在最后,否则Java会假设它是双倍的。

在Oracle Java教程中, 浮点文字下的原始数据类型部分

如果浮点字面值以字母F或f结尾,则浮点字面值为float类型; 否则它的类型是双倍的,它可以选择以字母D或d结尾。

这意味着它是单精度浮点文字而不是双精度 。 否则,你必须写float n = (float)2.99944323200023; 将双重投射到单一。

当你写1.0时,你是否希望文字是浮点数或双精度是不明确的。 通过编写1.0f,您告诉Java您希望文字是浮点数,而使用1.0d指定它应该是double(如果您没有明确指定,也是默认值)。

如果f在最后没有被精确化,则值被认为是double 。 并且double会导致内存中的字节数多于float