@Test
void a() {
NumberFormat format = DecimalFormat.getInstance(Locale.CHINA);
format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(2);
format.setCurrency(Currency.getInstance(Locale.CHINA));
for (RoundingMode mode : RoundingMode.values()) {
if(mode == RoundingMode.UNNECESSARY) continue;
format.setRoundingMode(mode);
System.out.println("Rounding mode: " + mode);
System.out.println("--------------------------------------------------------");
System.out.println("\t format 1.014 is " + format.format(1.014));
System.out.println("\t format 1.015 is " + format.format(1.015));
System.out.println("\t format 1.016 is " + format.format(1.016));
System.out.println();
}
}
format 1.014 is 1.02
format 1.015 is 1.02
format 1.016 is 1.02
format 1.014 is 1.01
format 1.015 is 1.01
format 1.016 is 1.01
format 1.014 is 1.02
format 1.015 is 1.02
format 1.016 is 1.02
format 1.014 is 1.01
format 1.015 is 1.01
format 1.016 is 1.01
format 1.014 is 1.01
format 1.015 is 1.01
format 1.016 is 1.02
format 1.014 is 1.01
format 1.015 is 1.01
format 1.016 is 1.02
format 1.014 is 1.01
format 1.015 is 1.01
format 1.016 is 1.02
以退出代码0结束的过程
答案 0 :(得分:4)
那是因为1.015实际上是
1.0149999999999999023003738329862244427204132080078125
使用BigDecimal的解决方案适用于字符串
BigDecimal db = new BigDecimal("1.015");
db = db.setScale(2, BigDecimal.ROUND_HALF_UP);`
答案 1 :(得分:-1)
使用舍入模式:CEILING(向上舍入)
exec()
示例:public static Double roundUp(double n, int decimalPlace) {
BigDecimal instance = new BigDecimal(Double.toString(n));
return instance.setScale(decimalPlace, RoundingMode.CEILING).doubleValue();
}
-> roundUp(1.014, 2)