Я использую jdk 1.8.0_45, и наши тесты обнаружили ошибку в руинге. RoundingMode.HALF_DOWN работает так же, как RoundingMode.HALF_UP, когда последний десятичный знак, определяющий округление, равен 5.
Я нашел связанные проблемы с RoundingMode.HALF_UP, но они исправлены в обновлении 40. Я также поместил ошибку в oracle, но по моему опыту они действительно не отвечают.
package testjava8;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class Formatori {
public static void main(String[] args) {
DecimalFormat format = new DecimalFormat("#,##0.0000");
format.setRoundingMode(RoundingMode.HALF_DOWN);
Double toFormat = 10.55555;
System.out.println("Round down");
System.out.println(format.format(toFormat));
format.setRoundingMode(RoundingMode.HALF_UP);
toFormat = 10.55555;
System.out.println("Round up");
System.out.println(format.format(toFormat));
}
}
Фактический результат: Округлить 10,5556 Округлять 10,5556
Ожидаемый результат (получить с помощью jdk 1.7): Округлить 10,5555 Округлять 10,5556