请自由评论我的问题。以下程序有什么问题,它会给出不同的四舍五入结果。
public class Test {
public static String round(double value, int places) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.toPlainString();
}
public static void main(String[] args) throws Exception {
double value1 = 1.1234565;
System.out.println(round(value1, 6));
double value2 = 1.1235;
System.out.println(round(value2, 3));
}
}
为什么输出结果是那样的呢?
1.123457
1.123 --> Actually, I expect 1.124
在 Doc(eclipse)中:
BigDecimal.valueOf
时,如果您执行Double.toString(Double.parseDouble(string))
会得到不同的值,才会丢失信息。如果此转换是无损的,则可以使用double
。 - Peter Lawrey