String上的格式化方法

时间:2017-05-23 16:40:50

标签: java

当我写这段代码时

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

为什么在这两种情况下都会打印出不同的输出,尽管两个代码的功能都相同?

3 个答案:

答案 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