如果值为200.3456,则应该将其格式化为200.34。 如果它是200,那么它应该是200.00。


当前回答

value = (int)(value * 100 + 0.5) / 100.0;

其他回答

四舍五入通常不是一个人想要的。相反,应该使用String.format()以所需的格式表示它。

最简单的方法,就是做一个这样的魔术;

double val = ....;
val = val*100;
val = Math.round(val);
val = val /100;

如果val从200.3456开始,那么它会变成20034.56,然后四舍五入到20035,然后我们除以它得到200.34。

如果你想总是四舍五入,我们可以通过转换为int型来截断:

double val = ....;
val = val*100;
val = (double)((int) val);
val = val /100;

这种技术适用于大多数情况,因为对于非常大的double(正的或负的),它可能会溢出。但如果你知道你的值将在一个适当的范围内,那么这应该对你有用。

请使用Apache通用数学:

Precision.round(10.4567, 2)

例如,如果你真的想要相同的双精度,但以你想要的方式四舍五入,你可以使用BigDecimal

new BigDecimal(myValue).setScale(2, RoundingMode.HALF_UP).doubleValue();

如果你只是想打印小数点后有两位数字的double,可以使用这样的方法:

double value = 200.3456;
System.out.printf("Value: %.2f", value);

如果你想将结果以String形式显示,而不是输出到控制台,请使用String.format(),并使用相同的参数:

String result = String.format("%.2f", value);

或者使用类DecimalFormat:

DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));