当我写这段代码时
float f=56.7876f;
System.out.print(String.format("%32.12f",f));
输出为:56.787601470947
但是,当我写这段代码时
System.out.print(String.format("%32.12f",56.7876));
输出为:56.787600000000
为什么在这两种情况下都会打印出不同的输出,尽管两个代码的功能都相同?
答案 0 :(得分:1)
All floating point numbers without some suffix are double
literals in Java。这就是
float ohNoes = 56.7876;
将产生编译器错误(java: incompatible types: possible lossy conversion from double to float
)。
所以如果你写
public class Main {
public static void main(String... args) {
System.out.println(String.format("%32.12f",56.7876));
System.out.println(String.format("%32.12f",56.7876f));
}
}
你可以看到差异。第一个打印double
文字56.7876
,而第二个打印最近的float
- 56.7876
的表示。
答案 1 :(得分:0)
String.format( format, Object... args)
最终调用:
private void print(float value, Locale l) throws IOException {
print((double) value, l);
}
表示float
文字。请参阅Formatter.java
Formatter$FormatSpecifier.java
您看到的值56.787601470947
是因为浮点文字56.7876f
已转换为double,如上面的方法所示。
如果您打印以下内容:
float f = 56.7876f;
System.out.println( (double)f );
您会看到相同的值:56.787601470947
答案 2 :(得分:-1)
System.out.print(String.format("%32.12f",56.7876));
它返回12个字符小数部分填充为0,它将56.7876视为double。
您可以参考以下链接: - https://dzone.com/articles/java-string-format-examples