【问题标题】:How to print a float with 2 decimal places in Java?如何在 Java 中打印带有 2 位小数的浮点数?
【发布时间】:2021-05-07 04:37:42
【问题描述】:

我可以用System.out.print 做吗?

【问题讨论】:

    标签: java formatting printf decimal-point


    【解决方案1】:

    您可以使用printf 方法,如下所示:

    System.out.printf("%.2f", val);
    

    简而言之,%.2f 语法告诉 Java 以浮点数 (f) 的十进制表示形式返回带有 2 个小数位 (.2) 的变量 (val)。格式说明符 (%)。

    除了f之外,你还可以使用其他转换字符:

    • d:十进制整数
    • o: 八进制整数
    • e: 科学计数法中的浮点数

    【讨论】:

    • 请注意 String.format 取决于您当前的本地配置,您可能不会得到一个点作为分隔符。更喜欢使用String.format(java.util.Locale.US,"%.2f", val);
    • @gomino 为什么不Locale.FRANCE
    • @gomino 没错。那么为什么要为法国用户在数字中加上点呢?
    • 我添加此评论是为了提醒那些希望始终使用点作为分隔符的人。
    • @gomino 这是有道理的,但我认为“更喜欢”硬编码Locale.US 太过分了。如果您需要为大小写折叠、数字呈现等硬编码“中性”语言环境,请指定Locale.ROOT。这适用于将由另一个程序使用的文本,而不是为人类用户呈现的文本。对于呈现给用户的文本,请遵循他们的语言环境,无论他们是明确指定还是默认设置。
    【解决方案2】:

    您可以使用DecimalFormat。一种使用方式:

    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(2);
    System.out.println(df.format(decimalNumber));
    

    另一种是使用#.## 格式构造它。

    我发现所有格式化选项的可读性都比调用格式化方法低,但这是一个偏好问题。

    【讨论】:

    • System.out.printf("%.2f", value) 语法发生了什么?它还在吗?
    • 是的。它仍然是一个选项 - 您可以取消删除您的答案;)
    • 看起来这是我的选择,因为我还不知道如何使用 DecimalFormat :) 谢谢!
    • 我已经有一段时间没有做大量的 Java 工作了,当我不断看到 DecimalFormat 的答案时,我立刻以为我错了,但感谢您澄清这一点。
    • df.setMinimumFractionDigits(2);强制两位数
    【解决方案3】:

    如果您需要在代码中将值作为String,我建议您使用String.format()

    例如,您可以通过以下方式使用String.format()

    float myFloat = 2.001f;
    
    String formattedString = String.format("%.02f", myFloat);
    

    【讨论】:

    • "%.02f" 和 "%.2f" 是一回事
    【解决方案4】:
    double d = 1.234567;
    DecimalFormat df = new DecimalFormat("#.##");
    System.out.print(df.format(d));
    

    【讨论】:

    • 嗨凯文,如果输入 10.0000,我只会得到 10。如果我想显示 10.00 那我该怎么办?
    • @Mdhar9e 使用DecimalFormat df = new DecimalFormat("0.00");
    【解决方案5】:
    float f = 102.236569f; 
    DecimalFormat decimalFormat = new DecimalFormat("#.##");
    float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
    

    【讨论】:

    • 根据区域设置,您可能会得到一个逗号。如果你想要一个点分隔符,使用这个: DecimalFormat("#.##", DecimalFormatSymbols(Locale.US))
    【解决方案6】:

    您可以使用下面的快速代码,这些代码最后会自行更改。在点之后添加多少个零

    float y1 = 0.123456789;
    DecimalFormat df = new DecimalFormat("#.00");  
    y1 = Float.valueOf(df.format(y1));
    

    变量 y1 之前等于 0.123456789。在代码之后它只变成 0.12

    【讨论】:

    • 点前不显示0。应该是 DecimalFormat df = new DecimalFormat("0.00");
    • 当然! DecimalFormat("0.00") 也可以!好地方。
    【解决方案7】:
    float floatValue=22.34555f;
    System.out.print(String.format("%.2f", floatValue));
    

    输出为 22.35。 如果您需要 3 个小数点,请将其更改为“%.3f”。

    【讨论】:

      【解决方案8】:

      很多人都提到了DecimalFormat。但如果您有最新版本的 Java,您也可以使用 printf

      System.out.printf("%1.2f", 3.14159D);
      

      See the docs on the Formatter for more information about the printf format string.

      【讨论】:

        【解决方案9】:

        一个简单的技巧是通过将变量与例如变量相乘来生成较短版本的变量。 100,将其四舍五入并再次除以100.0。这样您就可以生成一个具有2 个小数位的变量:

        double new_variable = Math.round(old_variable*100) / 100.0;
        

        这个“便宜的把戏”对我来说总是足够好,并且可以使用任何语言(我不是 Java 人,只是学习它)。

        【讨论】:

        • 这是错误的,在除以 100 后,许多数字会以浮点表示重复数字。因此不是两位小数。
        【解决方案10】:

        DecimalFormat

        这是教程中的一个示例:

          DecimalFormat myFormatter = new DecimalFormat(pattern);
          String output = myFormatter.format(value);
          System.out.println(value + "  " + pattern + "  " + output);
        

        如果你选择像“###.##”这样的模式,你会得到两位小数,我认为这些值是四舍五入的。您将需要查看链接以获得所需的确切格式(例如,是否需要尾随零)

        【讨论】:

          【解决方案11】:

          以下是如何在 Java 中显示具有 2 位小数的浮点数据输出的代码:

          float ratingValue = 52.98929821f; 
          DecimalFormat decimalFormat = new DecimalFormat("#.##");
          float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
          

          【讨论】:

            【解决方案12】:

            在 Java 中打印最多 2 位小数的浮点数:

                float f = (float)11/3;
                System.out.print(String.format("%.2f",f));
            

            输出:3.67

            > 使用 %.3f 最多保留三位小数。

            【讨论】:

              【解决方案13】:

              OK - str 浮动。

              package test;
              
              import java.text.DecimalFormat;
              
              public class TestPtz {
                public static void main(String[] args) {
                  String preset0 = "0.09,0.20,0.09,0.07";
                  String[] thisto = preset0.split(",");    
                  float a = (Float.valueOf(thisto[0])).floatValue();
                  System.out.println("[Original]: " + a);   
                  a = (float) (a + 0.01);
              
                  // Part 1 - for display / debug
                  System.out.printf("[Local]: %.2f \n", a);
                  // Part 2 - when value requires to be send as it is
                  DecimalFormat df = new DecimalFormat();
                  df.setMinimumFractionDigits(2);
                  df.setMaximumFractionDigits(2);
                  System.out.println("[Remote]: " + df.format(a));
              
                }
              }
              

              输出:

              run:
              [Original]: 0.09
              [Local]: 0.10 
              [Remote]: 0.10
              BUILD SUCCESSFUL (total time: 0 seconds)
              

              【讨论】:

                【解决方案14】:

                DecimalFormat 上,我花了一个小时或更长时间的一个问题- 它以不同的方式处理双精度和浮点输入。即使更改 RoundingMode 也无济于事。我不是专家,但认为它可以帮助像我这样的人。最后改用Math.round。 见下文:

                    DecimalFormat df = new DecimalFormat("#.##");
                    double d = 0.7750;
                    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
                    float f = 0.7750f;
                    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
                    // change the RoundingMode
                    df.setRoundingMode(RoundingMode.HALF_UP);
                    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
                    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
                

                输出:

                Double 0.7750 -> 0.78
                Float 0.7750f -> 0.77
                
                Rounding Up Double 0.7750 -> 0.78
                Rounding Up Float 0.7750f -> 0.77
                

                【讨论】:

                  【解决方案15】:

                  简单的演示小程序:

                  import java.io.*;
                  import java.util.Scanner;
                  
                  public class twovalues {
                  
                      public static void main(String args[]) {
                  
                          float a,b;
                          Scanner sc=new Scanner(System.in);
                          System.out.println("Enter Values For Calculation");
                  
                          a=sc.nextFloat();
                          b=sc.nextFloat();
                  
                          float c=a/b;
                          System.out.printf("%.2f",c);
                      }
                  }
                  

                  【讨论】:

                    【解决方案16】:

                    如果您想确保独立于用户的区域设置,只需执行String str = System.out.printf("%.2f", val).replace(",", ".");,您将始终获得/显示一个“。”作为小数分隔符。如果你不想让你的程序崩溃,这是必须的,如果你以后做某种转换,比如float f = Float.parseFloat(str);

                    【讨论】:

                      【解决方案17】:

                      试试这个:-

                      private static String getDecimalFormat(double value) {
                      
                          String getValue = String.valueOf(value).split("[.]")[1];
                      
                            if (getValue.length() == 1) {
                                return String.valueOf(value).split("[.]")[0] +
                                      "."+ getValue.substring(0, 1) + 
                                      String.format("%0"+1+"d", 0);
                             } else {
                                return String.valueOf(value).split("[.]")[0]
                                  +"." + getValue.substring(0, 2);
                            }
                      
                      
                       }
                      

                      【讨论】:

                      猜你喜欢
                      • 2011-02-02
                      • 2012-10-11
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-05-15
                      • 2016-10-19
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多