我在项目中使用double值,我希望始终显示前两位小数,即使它们是零。我使用此函数进行舍入,如果我打印的值是3.47233322,它(正确)打印3.47。但是,当我打印时,例如,它打印值为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。
我开始认为没有办法做到这一点......对吗?无论如何,再次感谢您的回答,如果您知道解决方案,请告诉我们!
答案 0 :(得分:49)
您可以使用以下内容:
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d));
编辑实际上回答了这个问题,因为我需要真正的答案,这出现在Google上,有人将其标记为答案,尽管当小数位数为0时这不会起作用。
答案 1 :(得分: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));
答案 2 :(得分:7)
你可以这样做:
double d = yourDoubleValue;
String formattedData = String.format("%.02f", d);
答案 3 :(得分:3)
DecimalFormat是最简单的选择:
double roundTwoDecimals(double d) {
DecimalFormat twoDecimals = new DecimalFormat("#.##");
return Double.valueOf(twoDecimals.format(d));
}
希望这能解决你的问题...
答案 4 :(得分:1)
我会使用类似的东西:
System.out.printf("%.2f", theValueYouWantToPrint);
这给你两位小数。
答案 5 :(得分:0)
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##");
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);
答案 6 :(得分:0)
您可以使用类似:
的内容如果你想在答案中保留0: 然后以格式String
使用(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