我只是想要一些关于这个的信息。
float n = 2.99944323200023f
f
文字末尾的 the 是做什么的?这叫什么?为什么使用它?
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 的省略不仅仅是一个错误。)
Java 将用于浮点变量的默认 Java 类型将是 double。因此,即使您将任何变量声明为浮点数,编译器实际上要做的是将双精度值分配给浮点变量,这是不可能的。所以,告诉编译器将此值视为浮点数,即“f”用来。
在 Java 中,当您将十进制数键入为 时3.6
,它会被解释为double
. double
是 64 位精度的 IEEE 754 浮点,而float
是 32 位精度的 IEEE 754 浮点。由于 afloat
不如 a 精确double
,因此不能隐式执行转换。
如果你想创建一个浮点数,你应该以f
(即:)结束你的数字3.6f
。
有关更多说明,请参阅Java 教程的原始数据类型定义。
这是为了区分浮点数和双精度数。后者没有后缀。
当您编写 1.0 时,您是否打算将文字设为浮点数或双精度数是模棱两可的。通过编写 1.0f,您是在告诉 Java 您打算将文字设为浮点数,而使用 1.0d 则指定它应该是双精度数(如果您没有明确指定,这也是默认值)。
你需要把'f'放在最后,否则Java会假设它是双精度的。
来自Oracle Java 教程,浮点文字下的原始数据类型部分
如果浮点字面量以字母 F 或 f 结尾,则它的类型为 float;否则它的类型是 double 并且可以选择以字母 D 或 d 结尾。
如果f
最后没有精确,则 value 被认为是 a double
。并且 adouble
导致内存中的字节数比float
.
对于新版本的 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