格式化双精度到2位小数不起作用

我想围绕这个双倍:

3.499999999999999 

至:

 3.50 

我已经使用了这两种方法:

 DecimalFormat df = new DecimalFormat("0.00"); double result = Double.valueOf(df.format(input)); System.out.println(answer); 

 public double round(double input) { int decimalPlace = 2; BigDecimal bd = new BigDecimal(input); bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP); return (bd.doubleValue()); } 

但它继续印刷:

 3.5 

有人有解决方案吗? 因为我真的认为这应该有效。 谢谢你的帮助。

你的第一个解决方案非常非常接近。 这样做:

  DecimalFormat df = new DecimalFormat("0.00"); System.out.println(df.format(input)); 

您的版本不起作用的原因是您将input加倍,将其格式化为具有2dp的String ,但随后将其转换回doubleSystem.out.println然后按原样打印double ,没有特殊的小数位规则。

您可以使用可能更简单的printf格式。

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

版画

 3.50 

你试过用#替换掉0吗?

DecimalFormat df = new DecimalFormat(“#。##”); 的System.out.println(df.format(输入));

根据这里 ,如果数字不存在, #将被解析为0