为什么在计算后删除浮点类型字段中的'f'

时间:2017-01-06 06:47:59

标签: java

我是Java语言的新手,我正在准备最近的Oracle基础认证考试。这是我在研究一些示例问题时让我感到困惑的一个问题。

在浮点类型中启动字段时,必须提供类似“1.0f”的值。但是当它进行计算时,不再需要'f'。即使在浮点类型字段的计算结果中,也缺少“f”。 只是好奇它发生了什么以及任何影响。真的很感激,如果有人花点时间回答这个问题,请提前感谢。

float x = 22.00f % 3.00f;
System.out.println(x);

运行后输出为1.0而不是1.0f

我正在使用JDK1.8。

5 个答案:

答案 0 :(得分:4)

f float literal 的一部分,不是值的一部分。

2f是一个浮点字面值,但其值的字符串表示形式为2.0f只是告诉编译器“这是一个浮点文字!”

事实上,如果你这样做:

float x = 22.00f;
System.out.println(x);

您获得输出22.0。你仍然失去了f

就像字符串文字一样。当您在代码中编写它们时,添加"" s:

String a = "Hello";

但是当你打印出来时,你会失去"" s。

答案 1 :(得分:1)

因为文档说明了这一点。 System.outPrintStream,所以:

  

PrintStream.println(float x):此方法的行为就像调用print(float)然后调用println()一样。

  

PrintStream.print(float f)String.valueOf(float)生成的字符串根据平台的默认字符编码转换为字节,这些字节的编写方式与write(int)方法完全相同。

  

String.valueOf(float f):表示形式正是一个参数的Float.toString方法返回的表示形式。

  

Float.toString(float f):如果 m 大于或等于10 -3 但小于10 7 ,那么它是表示为 m 的整数部分,十进制形式,没有前导零,后跟'。' ('\ u002E'),后跟一个或多个十进制数字,表示 m 的小数部分。

没有添加“float”后缀。

答案 2 :(得分:0)

“f”字符只是 float literals 中的 float类型后缀,如JLS §3.10.2. Floating-Point Literals中所述。文字仅用于源代码。编译器必须将它们解释为特定类型。

特别是,它不是存储在float类型变量中的值的一部分。看看这段代码:

float a = 22.00f;
float b = 3.00f;
float x = a % b;
System.out.println(a);
System.out.println(b);
System.out.println(x);

打印出来:

  

22.0
  3.0
  1.0

完全不同的东西:你知道你使用的modulo operation %在使用浮点数时表现为整数运算吗?浮动值在实际划分之前被截断(不是舍入)。有关详细信息,请参阅JLS §15.17.3. Remainder Operator %

答案 3 :(得分:0)

根据我的理解,在一个数字之后添加'f'的主要原因是将它从双重中删除。例如

float x= 2.002f;
double y = 2.002;

'f'告诉java这个数字是浮点数。运行计算时,'f'对它没有影响。

答案 4 :(得分:0)

请不要将此视为盲值浮动值float f=22.00f;

这是为了使编译器熟悉浮点值22.00的类型为float。 默认情况下,22.00将被视为double,后缀f是为了使编译器知道它的float而不是double。