Naik - s blog - Виведення числа з точністю до заданої кількості цифр після коми
Іноді потрібно вивести певну кількість цифр після коми, навіть якщо цифри кінцеві нулі.
Це завдання вирішує класDecimalFormat, якому конструктор класу необхідно передати шаблон числа. Розглянемо кілька варіантів використання: 1) Приклад округлення до трьох знаків
DecimalFormat df = New DecimalFormat("0.000"); System.out.println(df.format(13.6784));//результат 13,678 System.out.println(df.format(13.6785));//результат 13,678 System.out.println(df.format(13.67851)); //результат 13,679 System.out.println(df.format(13));//результат 13,000
Розділювачем між цілою та дробовою частиною в даному випадку виступає кома, але це залежить від поточної локалізації. Якщо як роздільник потрібна точка, то можемо це зробити, вказавши американську локалізацію. 2) Округлення до двох знаків та американська локалізація
DecimalFormat df = New DecimalFormat("0.00",DecimalFormatSymbols.getInstance(Locale.US)); System.out.println(df.format(13.6749));//результат 13.67 System.out.println(df.format(13.6750));//результат 13.68 System.out.println(df.format(13.6751)); //результат 13.68 System.out.println(df.format(13));//результат 13.00
3) Якщо ви були уважні, то могли замінити, що округлення працює дивним чином. Наприклад,
Хоча очікувана відповідь: 13,679. Уся справа в тому, що за умовчанням використовується округленняHALF_EVEN, де округлення йде у бік найближчого парного. Це так зване «Округлення банкірів», яке використовується головним чином США. Такий спосіб заокруглення дозволяє знизити накопичення помилок при заокругленні. Розглянемо приклад: дробові частини.49 та.51 врівноважують один одного, одне число округляється в меншу, а другий у велику строну. Але як бутиз дробовою частиною.50, яка, припустимо, завжди збільшується у велику строну. І тому придумали таку систему: дивимося сусіднє число, якщо число непарно, то округляємо у бік; якщо парне, то округляємо менший бік. Або простіше кажучи, округляємо половину до найближчого парного числа. Розглянемо два випадки:
Приклад коду, що описує цю ситуацію (HALF_EVEN):
DecimalFormat df = New DecimalFormat("0.000"); System.out.println(df.format(13.6785));//результат 13,678 System.out.println(df.format(13.6795));//результат 13,680
Якщо вас не влаштовує таке заокруглення, то можна переключитися на заокруглення, звичніше нам — заокруглення у більшу сторону (HALF_UP):