DecimalFormat decimalFormat = new DecimalFormat(); decimalFormat.setRoundingMode(RoundingMode.HALF_UP); decimalFormat.applyPattern(".00"); System.out.print(decimalFormat.format(63.275)); // output : 63.27 System.out.print(decimalFormat.format(64.275)); // output : 64.28¿Por qué son diferentes?
El valor de 63,275 se registra en la computadora como 63,27499999999999857891452847979962825775146484375. Según el documento de la API de Java " https://docs.oracle.com/javase/8/docs/api/java/math/RoundingMode.html#HALF_UP " Se comporta como RoundingMode.UP si la fracción descartada es ≥ 0,5; de lo contrario, se comporta como RoundingMode.DOWN. asi que ,
63.27499999999999857891452847979962825775146484375 ~ 63.27 64.275000000000005684341886080801486968994140625 ~ 64.28public static double roundByPlace(double number, int scale){ BigDecimal bigDecimal = BigDecimal.valueOf(number); String pattern = "0."; for(int i = 0; i<scale; i++){ pattern = pattern+"0"; } DecimalFormat decimalFormat = new DecimalFormat(pattern); decimalFormat.setRoundingMode(RoundingMode.HALF_UP); double result = Double.parseDouble(decimalFormat.format(bigDecimal)); return result; }