String的格式化方法

时间:2017-04-06 17:49:43

标签: java string

当我写这段代码时

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

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

2 个答案:

答案 0 :(得分:1)

参考why f is placed after float values?现在考虑一下,

    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
    System.out.print(String.format("%32.12f", 56.7876f)); //                 56.787601470947

对于浮点文字,默认类型为double。当您说f = 56.7876时,编译器将发出警告Type mismatch: cannot convert from double to float。您需要显式地将其转换为float(考虑到从double到float的精度损失)。
在此示例中,从 56.7876 打印的输出的类型为 double 56.787600000000 ,而其余的类型为 float 。< / p>

为了给你一个更好的例子,请考虑以下情况。

    float f = 56.7874f;
    System.out.print(String.format("%32.12f", f));        //                 56.787399291992
    System.out.print(String.format("%32.12f", 56.7874));  //                 56.787400000000
    System.out.print(String.format("%32.12f", 56.7874f)); //                 56.787399291992

这清楚地表明从56.787456.7873

的精度损失

答案 1 :(得分:0)

是System.out.print(的String.format( “%32.12f”,56.7876));它返回12个字符小数部分填充为0,它将56.7876视为double。

您可以参考以下链接: - https://dzone.com/articles/java-string-format-examples