如何在Java中显示带有2个小数位的浮点数据的输出?

时间:2010-03-29 14:45:34

标签: java formatting decimal-point

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

17 个答案:

答案 0 :(得分:210)

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

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

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

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

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

答案 1 :(得分:158)

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

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

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

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

答案 2 :(得分:75)

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

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

float myFloat = 2.001f;

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

答案 3 :(得分:36)

double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

答案 4 :(得分:15)

float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24

答案 5 :(得分:9)

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

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

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

答案 6 :(得分:8)

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

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

这个"便宜的伎俩"对我来说总是很好,并且可以用任何语言工作(我不是Java人,只是学习它)。

答案 7 :(得分:6)

float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

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

答案 8 :(得分:6)

查看DecimalFormat

以下是教程中的示例:

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

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

答案 9 :(得分:4)

您可以在下面更改的快速代码下方使用它。在该点之后添加参考的零个数

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

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

答案 10 :(得分: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)

答案 11 :(得分:2)

下面是代码,如何在Java中显示带有两位小数的float数据的输出:

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

答案 12 :(得分: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);
    }
}

答案 13 :(得分:0)

如果您想确保独立于用户的区域设置,您将始终获得/显示"。"只需执行String str = System.out.printf("%.2f", val).replace(",", ".");。作为小数分隔符。如果您以后进行某种转换(例如float f = Float.parseFloat(str);

),那么如果您不想让程序崩溃,这是必须的。

答案 14 :(得分:0)

DecimalFormat上有一个小时或一个以上的问题-它以不同的方式处理double和float输入。即使更改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 :(得分: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);
      }


 }

答案 16 :(得分:0)

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

    float f = (float)11/3;
    System.out.print(String.format("%.2f",f));
<块引用>

输出:3.67

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