Java 字符串的格式化方法

Java 字符串的格式化方法,java,Java,当我写这段代码的时候 float f=56.7876f; System.out.print(String.format("%32.12f",f)); System.out.print(String.format("%32.12f",56.7876)); 输出为:56.787601470947 但是,当我写这段代码的时候 float f=56.7876f; System.out.print(String.format("%32.12f",f)); System.out.print(Str

当我写这段代码的时候

float f=56.7876f;
System.out.print(String.format("%32.12f",f)); 
System.out.print(String.format("%32.12f",56.7876));
输出为:56.787601470947

但是,当我写这段代码的时候

float f=56.7876f;
System.out.print(String.format("%32.12f",f)); 
System.out.print(String.format("%32.12f",56.7876));
产量为:56.787600000000

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

System.out.print(String.format(“%32.12f”,56.7876))返回12字符分数填充0,并将其视为56.7876倍。
您可以参考以下链接:-

System.out.print(String.format(“%32.12f”,56.7876))返回12字符分数填充0,并将其视为56.7876倍。
您可以参考以下链接:-

。这就是原因

float ohNoes = 56.7876;
将产生编译器错误(
java:不兼容类型:可能从double转换为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
literal
56.7876
,而第二个打印最接近的
float
-表示
56.7876

。这就是原因

float ohNoes = 56.7876;
将产生编译器错误(
java:不兼容类型:可能从double转换为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
literal
56.7876
,而第二个打印最接近的
float
-表示
56.7876

字符串.format(format,Object…args)
最终调用:

private void print(float value, Locale l) throws IOException {
    print((double) value, l);
}
对于
float
文本。请参见中的
Formatter$FormatSpecifier.java

您看到的值
56.787601470947
是因为浮点文本
56.7876f
被转换为双精度,如上面的方法所示

如果打印以下内容:

float f = 56.7876f;
System.out.println( (double)f );
您将看到相同的值:
56.787601470947

字符串。format(format,Object…args)
最终调用:

private void print(float value, Locale l) throws IOException {
    print((double) value, l);
}
对于
float
文本。请参见中的
Formatter$FormatSpecifier.java

您看到的值
56.787601470947
是因为浮点文本
56.7876f
被转换为双精度,如上面的方法所示

如果打印以下内容:

float f = 56.7876f;
System.out.println( (double)f );

您将看到相同的值:
56.787601470947

,因为
56.7876
是一个
double
文本。尝试
System.out.print(String.format(“%32.12f”,56.7876f))您想知道为什么56.787601470947265625是56.7876的单精度浮点表示形式,为什么56.787599999999763537753903865814208984375是56.7876的双精度浮点表示形式吗?请参阅和,因为
56.7876
double
文本。尝试
System.out.print(String.format(“%32.12f”,56.7876f))您想知道为什么56.787601470947265625是56.7876的单精度浮点表示形式,为什么56.787599999999763537753903865814208984375是56.7876的双精度浮点表示形式吗?看,这并没有回答眼前的问题。这并没有回答眼前的问题。@Turing85我并不是说它是浮点数。56.7876f是。然后附加一个
f
使其成为
float
literal。@Turing85请查看行
,因为float literal 56.7876f
@Turing85我不是指它作为float literal。56.7876f是。然后附加一个
f
使其成为
float
literal。@Turing85请查看行
,因为float literal 56.7876f