【问题标题】:Format method of StringString的格式化方法
【发布时间】:2017-04-06 17:49:43
【问题描述】:

当我写这段代码时

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

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

【问题讨论】:

  • 56.7876 没有f 后缀是double 值。
  • 试试56.7876f...
  • 我想知道为什么在 56.7876f 中,当我使用特定格式时,它会打印 56.787601470947。为什么当我使用 56.7876 时,它没有像第二种情况那样在给定的数字后面加上零
  • @Ankit,如果我的解决方案有帮助,请告诉我。如果您可以投票并标记接受您认为有帮助的解决方案,我将不胜感激:)

标签: java string


【解决方案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。您需要将其显式类型转换为浮点数(考虑到从双精度到浮点数的精度损失)。
在这个例子中,从 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.787456.7873 的精度损失

【讨论】:

  • 那么为什么在浮点数的情况下为0,而在浮点数的情况下为随机数??
  • 好问题。我会说我对此不是 100% 确定,但据我所知,如果类型为 double,则用于在内存中存储浮点数的默认数据类型。尾随的 0 仅表示 double 是 64 位双精度字面量而 float 是 32 位浮点字面量的精度。
  • 假设当我们添加两个数字时,我们只考虑前两个浮点值并丢弃其余的值。浮点数似乎在节省内存的同时考虑了计算的精确值。
  • @Ankit,如果您支持并标记您认为有帮助的答案,我将不胜感激 :) 谢谢。
  • 是的,我会投票赞成答案,而且我通常会对那些可以消除我怀疑的答案进行投票。到目前为止,没有人能够说出为什么随机数在浮点数的情况下会在小数点后出现,而在双精度值的情况下会出现 0。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多