我想绕过这双:
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
有人有解决方案吗?因为我真的认为这应该有效。谢谢你的帮助。
答案 0 :(得分:14)
你的第一个解决方案非常非常接近。就这样做:
DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(input));
您的版本不起作用的原因是您正在使用input
双倍,将其格式化为String
并使用2dp,然后将其转换回double
。 System.out.println
然后按照惯例打印double
,没有特殊的小数位规则。
答案 1 :(得分:4)
您可以使用更简单的printf格式。
System.out.printf("%.2f%n", 3.5);
打印
3.50
答案 2 :(得分:1)
您是否尝试用0
替换#
?
DecimalFormat df = new DecimalFormat(“#。##”); 的System.out.println(df.format(输入));
根据here,如果数字不存在,#
将被解析为0
答案 3 :(得分:0)
您可以使用Apache Commons-math的Precision类
double result = Precision.round(3.499999999999999, 2);