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