Я вижу странную проблему при использовании NumberFormat.format(double)
в open jdk1.8. Я знаю, что была проблема с округлением в предыдущих версиях, которая была исправлена в этой версии, но все еще что-токажется выключенным
public static void main (String args[]) {
double num = 16.34625;
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(4);
System.out.println("nf : " + nf.getRoundingMode());
System.out.println("BigDecimal is " + new BigDecimal(num).toString());
System.out.println("num after number format : " + nf.format(num));
}
Вот фактический результат:
nf : HALF_EVEN
num : 16.34625
BigDecimal is 16.346250000000001278976924368180334568023681640625
num after number format : 16.3463
Но я бы ожидал, что он будет округлен до 16,3462, поскольку в режиме HALF_EVEN цифра слева от отброшенногочисло четное, поэтому оно должно действовать как HALF_DOWN.
Вот документ на Java, подтверждающий это (https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html#HALF_EVEN).