我是Java语言的新手,我正在准备最近的Oracle基础认证考试。这是我在研究一些示例问题时让我感到困惑的一个问题。
在浮点类型中启动字段时,必须提供类似“1.0f”的值。但是当它进行计算时,不再需要'f'。即使在浮点类型字段的计算结果中,也缺少“f”。 只是好奇它发生了什么以及任何影响。真的很感激,如果有人花点时间回答这个问题,请提前感谢。
float x = 22.00f % 3.00f;
System.out.println(x);
运行后输出为1.0而不是1.0f
我正在使用JDK1.8。
答案 0 :(得分:4)
f
是 float literal 的一部分,不是值的一部分。
2f
是一个浮点字面值,但其值的字符串表示形式为2.0
。 f
只是告诉编译器“这是一个浮点文字!”
事实上,如果你这样做:
float x = 22.00f;
System.out.println(x);
您获得输出22.0
。你仍然失去了f
。
就像字符串文字一样。当您在代码中编写它们时,添加""
s:
String a = "Hello";
但是当你打印出来时,你会失去""
s。
答案 1 :(得分:1)
因为文档说明了这一点。 System.out
是PrintStream
,所以:
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。