19

我只是想要一些关于这个的信息。

float n = 2.99944323200023f

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

4

10 回答 10

21

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 是一种更简洁、更简洁的显示方式。

为什么选择 double 作为默认而不是浮动?好吧,如今,在 99% 的情况下,双倍浮点数的内存需求都不是问题,而且它们提供的额外准确性在很多情况下都是有益的——所以你可以说这是明智的默认设置。

d请注意,您还可以通过在末尾添加 a 来将十进制文字显式显示为双精度:

double d = 3.14d;

...但是因为无论如何它都是双值,所以这没有效果。有些人可能会主张它主张更清楚你的意思是什么文字类型,但我个人认为它只是使代码混乱(除非你有很多浮动文字挂在周围并且你想强调这个文字确实是双, f 的省略不仅仅是一个错误。)

于 2012-12-04T13:30:03.020 回答
6

Java 将用于浮点变量的默认 Java 类型将是 double。因此,即使您将任何变量声明为浮点数,编译器实际上要做的是将双精度值分配给浮点变量,这是不可能的。所以,告诉编译器将此值视为浮点数,即“f”用来。

于 2012-12-04T13:29:46.973 回答
2

在 Java 中,当您将十进制数键入为 时3.6,它会被解释为double. double是 64 位精度的 IEEE 754 浮点,而float是 32 位精度的 IEEE 754 浮点。由于 afloat不如 a 精确double,因此不能隐式执行转换。

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

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

于 2012-12-04T13:33:06.813 回答
1

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

于 2012-12-04T13:29:51.247 回答
1

当您编写 1.0 时,您是否打算将文字设为浮点数或双精度数是模棱两可的。通过编写 1.0f,您是在告诉 Java 您打算将文字设为浮点数,而使用 1.0d 则指定它应该是双精度数(如果您没有明确指定,这也是默认值)。

于 2012-12-04T13:29:55.927 回答
1

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

于 2012-12-04T13:29:58.500 回答
1

这意味着它是单精度浮点文字而不是双精度。否则,您必须编写float n = (float)2.99944323200023;将双精度转换为单精度。

于 2012-12-04T13:30:09.323 回答
1

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

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

于 2012-12-04T13:30:15.573 回答
1

如果f最后没有精确,则 value 被认为是 a double。并且 adouble导致内存中的字节数比float.

于 2012-12-04T13:30:42.027 回答
0

对于新版本的 C 语言,从双输入到浮点变量的转换(赋值操作)由编译器完成,没有 'F'

float fraction1 = 1337;
float fraction2 = 1337.0;
float fraction3 = 1337.0F;
printf("%f, %f, %f", fraction1, fraction2, fraction3);

output(C GNU): 1337.000000, 1337.000000, 1337.000000
于 2022-01-14T03:14:59.100 回答