Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串的格式化方法_Java_String - Fatal编程技术网

Java 字符串的格式化方法

Java 字符串的格式化方法,java,string,Java,String,当我写这段代码的时候 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 char分数部分填充0,它认为56.7876为两倍。 您可以参考以下链接:-

现在考虑这个,

    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
时,编译器将发出警告
类型不匹配:无法从double转换为float
。您需要显式地将其类型转换为float(考虑到从double到float的精度损失)。
在此示例中,从56.7876打印的输出为double 56.787600000000类型,而其余为float类型

为了给您提供一个更好的示例,请对以下场景进行排序

    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.7874
56.7873

56.7876
没有
f
后缀是一个
双倍的
值。试试
56.7876f
…我想知道为什么在56.7876f中,当我使用特定格式时,它会打印56.787601470947。为什么在第二种情况下,当我使用56时,它不在给定的数字后面加上零呢。7876@Ankit,如果我的解决方案有帮助,请告诉我。如果你能向上投票,马克接受你认为有用的解决方案,我将不胜感激:)那么,为什么在双精度情况下0会出现,在浮点情况下是随机数?好问题。我想说我不是100%确定,但据我所知,如果类型为double,则默认的数据类型用于在内存中存储浮点数。尾随0表示双精度为64位双字元的精度,而浮点为32位浮点文字。当我们添加两个数字时,我们只考虑前两个浮点值,然后丢弃其余的。“浮点”似乎在考虑记忆中的精确计算值。“Ankit,如果你投票赞成并标记出你找到的答案,我会很感激的。”谢谢。是的,我会赞成答案,我通常会回答那些让我怀疑的答案。到目前为止,还没有人能说出为什么随机数出现在十进制浮点数之后,而双精度浮点数出现在0之后。