219

我可以这样做System.out.print吗?

4

17 回答 17

301

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

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

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

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

  • d: 十进制整数
  • o: 八进制整数
  • e: 科学计数法中的浮点数
于 2010-03-29T14:47:06.483 回答
208

您可以使用DecimalFormat. 一种使用方法:

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

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

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

于 2010-03-29T14:46:37.420 回答
95

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

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

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
于 2012-05-04T22:48:31.213 回答
42
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
于 2010-03-29T14:47:06.503 回答
18
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
于 2016-12-15T09:25:01.050 回答
13

您可以使用下面的这个快速代码,它在最后改变了自己。在该点之后添加多少个零

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

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

于 2019-09-15T14:33:58.383 回答
11
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

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

于 2014-10-17T17:00:33.233 回答
9

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

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

有关 printf 格式字符串的更多信息,请参阅 Formatter 上的文档

于 2010-03-29T14:54:53.180 回答
9

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

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

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

于 2014-08-11T13:50:30.660 回答
7

看看十进制格式

这是教程中的一个示例:

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

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

于 2010-03-29T14:47:34.287 回答
5

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

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
于 2018-10-31T06:57:33.417 回答
5

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

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

输出:3.67

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

于 2021-02-11T05:56:53.687 回答
3

好的 - 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)
于 2012-06-05T14:15:41.317 回答
2

一个让我花了一个小时或更长时间的问题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
于 2019-05-15T10:27:02.917 回答
1

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

于 2018-04-10T17:57:35.543 回答
1

用于演示的小简单程序:

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);
    }
}
于 2016-05-27T20:03:01.643 回答
0

尝试这个:-

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);
      }


 }
于 2019-08-17T10:35:12.580 回答