Java float округление до 2 знаков

Использование DecimalFormat

Класс DecimalFormat имеет различные параметры формата для округления десятичных знаков в зависимости от инициализированного формата. В приведенном ниже примере мы инициализировали в формате как . Это означает, что десятичный разряд ограничивается двумя цифрами.

Мы также можем использовать метод округления числа до n десятичных знаков для инициализированного формата. Например, и округляет цифру до меньшего значения. Остальные режимы округления округляют до максимального значения.

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class DecimalFormatDemo {

  public static void main(String[] args) {
    Double d = 1234.675389;
    DecimalFormat df = new DecimalFormat("#.##");

    System.out.println("Original input value: " + d);
    System.out.println("Using DecimalForamt: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.DOWN);
    System.out.println("Using Rounding mode DOWN: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.CEILING);
    System.out.println("Using Rounding mode CEILING: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.UP);
    System.out.println("Using Rounding mode UP: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.FLOOR);
    System.out.println("Using Rounding mode FLOOR: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.HALF_DOWN);
    System.out.println("Using Rounding mode HALFDOWN: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.HALF_EVEN);
    System.out.println("Using Rounding mode HALFEVEN: " + df.format(d));
    
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println("Using Rounding mode HALFUP: " + df.format(d));
  }

}
Original input value: 1234.675389
Using DecimalForamt: 1234.68
Using Rounding mode DOWN: 1234.67
Using Rounding mode CEILING: 1234.68
Using Rounding mode UP: 1234.68
Using Rounding mode FLOOR: 1234.67
Using Rounding mode HALFDOWN: 1234.68
Using Rounding mode HALFEVEN: 1234.68
Using Rounding mode HALFUP: 1234.68

DecimalFormat

Еще один вариант — использовать класс

DecimalFormat

. Он предназначен для форматирования любого числа в Java, будь это целое число или число с плавающей запятой.При создании экземпляра

DecimalFormat

мы можем передать ему строку форматирования. Она укажет, сколько десятичных разрядов нужно отформатировать для ввода. Как будет выглядеть наш пример с использованием

DecimalFormat

double value = 34.766674;DecimalFormat decimalFormat = new DecimalFormat( “#.###” );String result = decimalFormat.format(value);System.out.print(result);//34,767

Строка

#.###

— это шаблон, который указывает, что мы форматируем передаваемое значение до 3 десятичных знаков.Чтобы изменить шаблон после создания объекта DecimalFormat, можно использовать его методы

applyPattern

и

applyLocalizedPattern

DecimalFormat decimalFormat = new DecimalFormat(“#.###”);decimalFormat.applyPattern(“#.#”);decimalFormat.applyLocalizedPattern(“#.#####”);

Но мы сегодня говорим про округление, не правда ли? При обрезании числа с знаками после запятой, выходящими за заданный шаблон,

DecimalFormat

округляет число в большую сторону, если последний обрезаемое число больше 5. Но что если число — 5? Получается, что оно ровно посередине между ближайшими целыми. Что тогда?В этом случае учитывается предыдущее число.Если оно чётное, округление производится:

DecimalFormat decimalFormat = new DecimalFormat(“#.###”);String result = decimalFormat.format(7.4565);System.out.println((result));// 7,457

Если нечётное — не производится:

DecimalFormat decimalFormat = new DecimalFormat(“#.###”);String result = decimalFormat.format(7.4575);System.out.println((result));// 7,457

Есть небольшая разница между форматированием чисел с плавающей запятой с использованием String.format() и DecimalFormat.format(). Первый всегда будет печатать конечные нули, даже если нет дробной части. К примеру:

String firstResult = String.format(“%.3f”, 7.000132);System.out.println((firstResult)); // 7.000DecimalFormat decimalFormat = new DecimalFormat(“#.###”);String secondResult = decimalFormat.format(7.000132);System.out.println((secondResult)); // 7

Как мы видим, при форматировании числа 7.000132 с точностью до трёх десятичных разрядов, метод format() у String выводит 7.000, в то время как у DecimalFormat метод format() выведет 7.То есть вы можете выбирать

String.format()

или

DecimalFormat.format()

в зависимости от того, нужны ли вам конечные нули или нет.Применяя вышеописанные способы, мы получали результат в виде строки. Давайте же рассмотрим способы, как можно получить обратно именно числовые значения.

Метод Math.round() java

При использовании метода Math.round() можно контролировать п-количество десятичных разрядов путем умножения и деления на 10^п :

public static double roundAvoid(double value, int places) {
    double scale = Math.pow(10, places);
    return Math.round(value * scale) / scale;
}

Этот метод не рекомендуется использовать для округления чисел, поскольку он усекает значение. Во многих случаях значения округляются неправильно:

System.out.println(roundAvoid(1000.0d, 17));
// Вывод: 92.23372036854776 !!
System.out.println(roundAvoid(260.775d, 2));
// Вывод: 260.77 вместо ожидаемого 260.78

Использование метода format ()

В этом примере мы увидим, как использовать метод format () для ограничения десятичных разрядов. Первый аргумент определяет формат. обозначает 2 десятичных знака, обозначает 3 десятичных знака и так далее. Следовательно, в аргументе формата мы можем указать предел десятичных знаков. Второй аргумент — это входное значение.

public class LimitDecimalDemo {

  public static void main(String[] args) {
    Double d = 12345.783214;
    System.out.println("Original value: " + d);
    System.out.println("2 decimal format: ");
    System.out.format("%.2f", d);
    System.out.println("\n3 decimal format: ");
    System.out.format("%.3f", d);
    System.out.println("\n4 decimal format: ");
    System.out.format("%.4f", d);
  }

}
Original value: 12345.783214
2 decimal format: 
12345.78
3 decimal format: 
12345.783
4 decimal format: 
12345.7832

Що потрібно для навчання?

Для того, щоб почати начання у Vertex Academy:

  1. Необхідно зателефонувати за телефоном 050 205 77 99 або 098 205 77 99, або на нашому сайті vertex-academy.com відправити заявку на зворотній дзвінок. Узгодити з менеджером Vertex Academy час співбесіди, прийти і підписати договір, і … вуаля! – почати заняття в призначений день.
  2. Величезне бажання стати програмістом. Тому що вчитися доведеться багато. Але воно того варте, якщо Вам дійсно подобається програмувати.

Хочете вивчити основи програмування з нуля або підвищити рівень своїх знань і готові багато працювати? Приходьте до нас!

У Vertex Academy проводяться курси програмування за напрямами:

Java з нуля Java ООП Java Professional Front-end

А також:

English for IT

String format

В качестве первого способа мы рассмотрим округление double:

double value = 34.766674;String result = String.format(“%.3f”,value);System.out.print(result);// 34,767

В результате мы отформатируем наше число с плавающей запятой 34766674 с точностью до

3 десятичных разрядов

, так как в инструкции для форматирования мы указали три знака после запятой “%.3f.В свою очередь %f при форматировании строки обозначает тип чисел с плавающей запятой, которое включает в себя тип данных

double

и

float

в Java.В примере выше мы выводили полученное значение в консоль. Теперь вопрос: как бы можно было это сократить? Все просто: нужно использовать printf, который в свою очередь является format + print. В итоге предыдущий пример у нас сократился бы до:

double value = 34.766674;System.out.printf(“%.3f”,value);

У экземпляра out класса

PrintStream

помимо этого метода есть ещё метод format, который работает аналогично:

double value = 34.766674;System.out.format(“%.3f”,value);

Округление происходит по режиму

HALF_UP

— в сторону числа, которое ближе к обрезаемому (к 0 или 10). Если же эти числа равноудалены (в случае с 5), то округление выполняется в большую сторону.Пример:

String firstResult = String.format(“%.3f”,7.0004);// 7,000String secondResult = String.format(“%.3f”,7.0005);// 7,001String thirdResult = String.format(“%.3f”,7.0006);// 7,001

Более подробно режимы округления мы разберем чуть ниже.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: