我正在尝试将一个double舍入到最接近的两位小数,但它只是四舍五入到最接近的整数。
例如,19634.0而不是19634.95。
这是我用于舍入的当前代码
double area = Math.round(Math.PI*Radius()*Radius()*100)/100;
我看不出我哪里出错了。
非常感谢您的帮助。
答案 0 :(得分:5)
好吧,Math.round(Math.PI*Radius()*Radius()*100)
是long
。 100
为int
。
因此Math.round(Math.PI*Radius()*Radius()*100) / 100
将变为long
(19634
)。
将其更改为Math.round(Math.PI*Radius()*Radius()*100) / 100.0
。 100.0
为double
,结果也为double
(19634.95
)。
答案 1 :(得分:2)
你真的想要将值舍入到2个位置,这会导致代码中的滚雪球舍入错误,或者只显示2位小数的数字吗?查看String.format()
。复杂但非常强大。
答案 2 :(得分:2)
您可以使用DecimalFormat
对象:
DecimalFormat df = new DecimalFormat ();
df.setMaximumFractionDigits (2);
df.setMinimumFractionDigits (2);
System.out.println (df.format (19634.95));
答案 3 :(得分:1)
您可能需要查看DecimalFormat
类。
double x = 4.654;
DecimalFormat twoDigitFormat = new DecimalFormat("#.00");
System.out.println("x=" + twoDigitFormat.format());
这给出“x = 4.65”。模式中#
和0
之间的区别在于始终显示零,如果最后一个为0,则不会显示#。
答案 4 :(得分:0)
以下示例来自this forum,但似乎正是您要找的。 p>
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}