Java: double类型:如何始终显示两位小数

27
我在我的项目中使用双精度浮点数,并且希望始终显示前两位小数,即使它们是零。我使用此函数进行舍入,如果我打印的值为3.47233322,则会(正确地)打印3.47。但是当我打印例如值2时,它会打印2.0。

我在项目中使用双精度浮点数,在打印时需要显示前两个小数位,即使它们为零。我使用这个函数进行四舍五入,如果我要打印的值是3.47233322,它将(正确地)打印3.47。但是当我打印2时,它会打印2.0。

public static double round(double d) {
    BigDecimal bd = new BigDecimal(d);
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
}

我想打印2.00!

有没有不使用字符串的方法可以做到这一点?

编辑:从您的答案中(感谢您),我了解到我没有清楚地告诉您我正在寻找什么(对此我很抱歉):我知道如何在数字后打印两个数字,使用您提供的解决方案... 我想直接在双精度值中存储这两个数字!因此,当我执行像这样的操作 System.out.println("" + d)(其中d是我带有值2的double),它会打印2.00。

我开始觉得没有办法做到这一点... 是吗?无论如何,再次感谢您的回答,请让我知道是否有解决方案!


3
我认为你不能改变Java存储double值的方式。你只能在展示时修改它们的格式。 - Peter Jaloveczki
是的...我想你是对的...每次向用户展示值时,我都必须格式化它们...很多次!感谢您的回答! - aveschini
好的,你只需要编写格式化方法一次,我不会担心那个的。; ) - Peter Jaloveczki
7个回答

54
你可以使用类似这样的东西:

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

为了实际回答问题,我进行了编辑,因为我需要真正的答案,而在Google上搜索时发现有人已将其标记为答案,尽管当小数为0时,这并不起作用。


2
我发现引号中的代码在给定数字为0.3时显示为.30,所以我改用了模式#0.00,到目前为止这个方法运行良好。 - James Jiang
对我来说,这个答案实际上不起作用。这是我得到的结果:13310.0 13676.31 26600.2 - wintermute

19

使用 java.text.NumberFormat 进行格式化:

NumberFormat nf= NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
nf.setRoundingMode(RoundingMode.HALF_UP);

System.out.print(nf.format(decimalNumber));

我编辑了我的问题以澄清我正在寻找什么。无论如何,谢谢! - aveschini
即使使用了这个选项,我恐怕问题仍然存在。它只是无法在小数点后打印两个零!仍在寻找适合强迫症患者的解决方案 14641.0 15180.7 15735.19 - wintermute

8
您可以简单地执行以下步骤:
double d = yourDoubleValue;  
String formattedData = String.format("%.02f", d);

这是一个不想以任何方式四舍五入数字的答案。 - Siavas
我想在将数值四舍五入后将其存储在 double 类型中。 - Sameer Kazi

3

DecimalFormat是使用最简单的选项:

double roundTwoDecimals(double d) {
        DecimalFormat twoDecimals = new DecimalFormat("#.##");
        return Double.valueOf(twoDecimals.format(d));
}

希望这可以解决你的问题...

1
我刚刚尝试了你的解决方案...它不起作用。我输入了3,它打印出了3.0。 - aveschini
我的错。我太匆忙了,没有仔细阅读“ALWAYS”。尝试将DecimalFormat更改为“##.00”。这将解决你的问题! - Mathias G.

1
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##");
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 

1
我会直接使用类似这样的代码:

我只会使用类似这样的东西:

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

这将给您两个小数位。

1
这是最简单的解决方案! - Hector Vido

1
你可以使用类似以下的内容:
如果你希望答案中保留 0:那么在格式字符串中使用 (0.00)。
double d = 2.46327;
DecimalFormat df = new DecimalFormat("0.00");
System.out.print(df.format(d));

输出:2.46

double d = 0.0001;
DecimalFormat df = new DecimalFormat("0.00");
System.out.print(df.format(d));

输出结果:0.00

然而,如果您使用 DecimalFormat df = new DecimalFormat("0.##");

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

输出:2.46。
double d = 0.0001;
DecimalFormat df = new DecimalFormat("0.##");
System.out.print(df.format(d));

输出:0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接