Java将双精度四舍五入将截断零
我有以下逻辑,将双精度值舍入到小数点后2位:
public double round(double value, int places) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.doubleValue();
}
它适用于大多数情况,但在某些情况下无法将结果四舍五入到小数点后2位,下面是一个例子
如果我使用代码round(12.503, 2)
调用这个方法,我需要结果为12.50
,因为我需要结果的小数点后两位,但我得到的输出为12.5
请帮我解决这个案子
# 1 楼答案
Java中的double表示一个数学数字,其中12.50与12.5是相同的数字。显示一个数字的位数是将其转换为字符串的问题,而不是数字本身的问题
因此,最好在将数字转换为字符串进行输出时进行舍入,例如: