Вчера я попытался самостоятельно изучить поведение метода DecimalFormat .format() со всеми его заполнителями и их действиями.
Итак, я написал два числа и испробовал на них разные шаблоны. С помощью «#.##» все незначащие нули были вырезаны, а с «0000.00» метод добавил начальные нули перед числом. Это было нормально, но затем я попробовал несколько странных шаблонов, просто чтобы посмотреть, что произойдет.
С шаблоном "33333.##" окончательный результат был действительно странным. Вы могли видеть мой код ниже:
DecimalFormat df = new DecimalFormat("33332.##");
double a= 222.46705219;
double b=-102.000;
System.out.println(df.format(a));
System.out.println(df.format(b));
И его вывод был:
33332222,47
-33332102,0
Тот же ввод, что и числа, но с использованием шаблона «33033.##» дал результат:
33222,4732
33102
Я понимаю, что программа добавила отформатированное число вместо 0, но почему, когда ноль не представлен в качестве заполнителя, метод по-прежнему округляет первое и (очевидно) второе число?
Почему мое первое число было округлено до второго цифра как должна быть, а второе число (b) напечатано с нулем в конце?
И почему, когда в середине "33033.##" ставится 0-заполнитель, программа вставляет отформатированное число a на своем месте, но не печатает "33" в конце числа b?
Я действительно не знаю, как объяснить такое поведение.