我只是想要一些关于这方面的信息。
float n = 2.99944323200023f
什么是f在的结尾文字呢?这叫什么?为什么使用它?
IT小君
2021-12-26T06:35:34 我只是想要一些关于这方面的信息。
float n = 2.99944323200023f
什么是f在的结尾文字呢?这叫什么?为什么使用它?
IT小君 Java 将用于浮点变量的默认 Java 类型将是 double。因此,即使您将任何变量声明为浮点数,编译器实际要做的就是将双精度值分配给浮点数变量,这是不可能的。因此,要告诉编译器将此值视为浮点数,即 'f'用来。
IT小君 在 Java 中,当您将十进制数输入为 时3.6,它会被解释为double. double是 64 位精度 IEEE 754 浮点数,而float是 32 位精度 IEEE 754 浮点数。由于 afloat不如 a 精确double,因此无法隐式执行转换。
如果你想创建一个浮点数,你应该以f(即:)结束你的数字3.6f。
IT小君 它是为了区分浮点数和双精度数。后者没有后缀。
IT小君 您需要将 'f' 放在最后,否则 Java 将假定它是双精度的。
IT小君 来自Oracle Java 教程的Floating-Point Literals下的原始数据类型部分
如果浮点文字以字母 F 或 f 结尾,则它属于 float 类型;否则它的类型是 double 并且可以选择以字母 D 或 d 结尾。
IT小君 这意味着它是一个单精度浮点文字而不是double precision。否则,您必须编写float n = (float)2.99944323200023;将双精度转换为单精度。
IT小君 当您编写 1.0 时,不清楚您希望文字是浮点数还是双精度数。通过编写 1.0f,您告诉 Java 您希望文字是浮点数,而使用 1.0d 指定它应该是双精度数(如果您没有明确指定,这也是默认值)。
IT小君 如果f最后没有精确,则 value 被认为是 a double。并且 adouble导致内存中的字节数比float.
在
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在末尾放置 a 来显式地将十进制文字显示为双精度:double d = 3.14d;...但因为无论如何它都是双值,所以这没有效果。有些人可能会争论说它更清楚你的意思是什么文字类型,但我个人认为它只是混乱代码(除非你有很多浮点文字闲逛并且你想强调这个文字确实意味着是一个双重,并且省略 f 不仅仅是一个错误。)