27

我在我的项目中使用双精度值,我希望始终显示前两位十进制数字,即使它们是零。我使用此函数进行舍入,如果我打印的值为 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 的双精度数),它会打印 2.00。

我开始认为没有办法做到这一点......对吧?再次感谢您的回答,如果您知道解决方案,请告诉我!

4

7 回答 7

53

你可以使用这样的东西:

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

编辑以实际回答问题,因为我需要真正的答案,这出现在谷歌上,有人将其标记为答案,尽管当小数为 0 时这不起作用。

于 2013-06-12T07:51:57.697 回答
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));
于 2013-06-12T07:51:32.813 回答
10

你可以简单地这样做:

double d = yourDoubleValue;  
String formattedData = String.format("%.02f", d);
于 2015-06-08T04:42:14.397 回答
3

DecimalFormat 是最容易使用的选项:

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

希望这能解决您的问题...

于 2013-06-12T07:52:21.993 回答
1
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##");
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 
于 2017-05-03T05:59:42.127 回答
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

于 2017-10-14T09:44:47.040 回答
1

我会使用类似的东西:

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

这给了你两位小数。

于 2021-06-04T18:09:39.500 回答