Содержание

java округление до 2 знаков после запятой

Автор admin На чтение 7 мин. Просмотров 807 Опубликовано

Содержание

  1. Обзор
  2. Десятичные числа в Java
  3. Форматирование десятичного числа
  4. Округление Double с помощью BigDecimal
  5. Округление чисел с плавающей запятой с помощью DoubleRounder
  6. Метод Math.round()
  7. Заключение

Обзор

В этой статье мы рассмотрим, как в Java округлить число до n десятичного знаков.

Десятичные числа в Java

Java предоставляет два примитивных типа, которые могут использоваться для хранения десятичных чисел: float и double . Double — это тип данных, используемый по умолчанию:

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

Форматирование десятичного числа

Если нужно вывести десятичное число с n знаками после запятой, можно отформатировать выходную строку:

Также можно округлить значение с помощью класса DecimalFormat :

Этот класс позволяет настроить процесс округления числа.

Округление Double с помощью BigDecimal

Чтобы округлить тип double до n знаков после запятой, можно написать helper-метод :

Обратите внимание, что при создании экземпляра класса BigDecimal мы должны всегда использовать конструктор BigDecimal(String) . Это позволяет избежать проблем с представлением неточных значений.

Можно сделать то же самое, используя библиотеку Apache Commons Math :

Актуальную версию этой библиотеки можно найти здесь . Для округления чисел применяется метод Precision.round() , который принимает два аргумента — значение и масштаб:

По умолчанию он использует тот же метод округления HALF_UP, что хэлпер. Поэтому результаты должны быть одинаковыми.

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

Округление чисел с плавающей запятой с помощью DoubleRounder

DoubleRounder — это утилита из библиотеки decimal4j . Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой. п :

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

Заключение

В этой статье мы рассмотрели различные методы округления чисел до n знаков после запятой, доступные в Java.

Можно просто отформатировать вывод без изменения значения или округлить переменную с помощью вспомогательного метода или подключаемых библиотек.

Код, использованный в этой статье, доступен на GitHub .

Данная публикация представляет собой перевод статьи « How to Round a Number to N Decimal Places in Java » , подготовленной дружной командой проекта Интернет-технологии.ру

Я прочитал много вопросов о stackoverflow, но ни один из них не работает для меня. Я использую math.round() для округления. это код:

вывод я get: 123 , но я хочу, чтобы он был 123.14 . я читал, что добавление *100/100 поможет, но, как вы можете видеть, мне не удалось заставить его работать.

абсолютно необходимо, чтобы как входные, так и выходные данные были двойными.

было бы большой помощью, если вы измените строку 4 вышеприведенного кода и разместите ее.

Ну, это работает.

Или, как сказал @Rufein

это сделает это и для вас.

Вернитесь к своему коду и замените 100 на 100.00 и дайте мне знать, если он работает. Однако, если вы хотите быть формальным, попробуйте следующее:

Я знаю, что это вопрос 2 года, но поскольку каждый орган сталкивается с проблемой, чтобы округлить значения в какой-то момент времени. Я хотел бы поделиться другим способом, который может дать нам округленные значения для любого масштаба, используя BigDecimal class. Здесь мы можем избежать дополнительных шагов, необходимых для получения окончательного значения, если мы используем DecimalFormat(«0.00») или используя Math.round(a * 100) / 100 .

Эта программа даст нам ниже выход

Добавление «D» в 100 делает его двойным литералом, поэтому полученный результат будет иметь точность

Это длинное, но полное доказательство, никогда не сработает

Просто передайте свой номер этой функции как двойной, он вернет вам округление десятичного значения до ближайшего значения 5;

если 4. 25, выход 4.25

если 4.20, выход 4.20

если 4.24, Output 4.20

если 4.26, выход 4.30

если вы хотите округлить до двух знаков после запятой, затем используйте

если до 3-х мест, новый DecimalFormat ( «#. ###» )

если до n мест, новый DecimalFormat ( «#. nTimes #» )

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

В Java есть целочисленные типы данных (long, int, char, short, byte) и есть типы с плавающей точкой (float, double), а по-русски — «с плавающей запятой» . Преобразование значений с дробной частью в целочисленные полезно для упрощения вычислений, последующего чтения и для сокращения объемов используемой памяти. Сделать это можно так:

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

Как округлить число в java

Округление чисел в Java

Числа с плавающей точкой (float, double) применяются при вычислении выражений, в которых требуется точность до десятичного знака. Высокая точность часто нужна в бухгалтерских и других вычислительных операциях. Но всегда ли нам нужен длинный “хвост” чисел после запятой? Может нам достаточно точности в три знака вещественной части? И есть нас такой вариант устраивает, как правильно выполнить округление? Именно об этом мы сегодня и поговорим: рассмотрим способы округления чисел в Java .

String format

В качестве первого способа мы рассмотрим округление double: В результате мы отформатируем наше число с плавающей запятой 34766674 с точностью до 3 десятичных разрядов , так как в инструкции для форматирования мы указали три знака после запятой «%.3f. В свою очередь %f при форматировании строки обозначает тип чисел с плавающей запятой, которое включает в себя тип данных double и float в Java. В примере выше мы выводили полученное значение в консоль. Теперь вопрос: как бы можно было это сократить? Все просто: нужно использовать printf, который в свою очередь является format + print. В итоге предыдущий пример у нас сократился бы до: У экземпляра out класса PrintStream помимо этого метода есть ещё метод format, который работает аналогично: Округление происходит по режиму HALF_UP — в сторону числа, которое ближе к обрезаемому (к 0 или 10). n:

Изучаем округление в Java: как в Java округлить число до n знаков после запятой

В этой статье мы рассмотрим, как в Java округлить число до n десятичного знаков.

Десятичные числа в Java

Java предоставляет два примитивных типа, которые могут использоваться для хранения десятичных чисел: float и double . Double — это тип данных, используемый по умолчанию:

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

Форматирование десятичного числа

Если нужно вывести десятичное число с n знаками после запятой, можно отформатировать выходную строку:

Также можно округлить значение с помощью класса DecimalFormat :

Этот класс позволяет настроить процесс округления числа.

Java: округление Double с помощью BigDecimal

Чтобы округлить тип double до n знаков после запятой, можно написать helper-метод :

Обратите внимание, что при создании экземпляра класса BigDecimal мы должны всегда использовать конструктор BigDecimal(String) . Это позволяет избежать проблем с представлением неточных значений.

Можно сделать то же самое, используя библиотеку Apache Commons Math :

Актуальную версию этой библиотеки можно найти здесь . Для округления чисел применяется метод Precision.round() , который принимает два аргумента — значение и масштаб:

По умолчанию он использует тот же метод округления HALF_UP, что хэлпер. Поэтому результаты должны быть одинаковыми.

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

Округление чисел с плавающей запятой с помощью DoubleRounder

DoubleRounder — это утилита из библиотеки decimal4j . Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой.

Последнюю версию библиотеки можно найти здесь . Чтобы подключить ее, добавьте зависимость в файл pom.xml :

Пример использования утилиты:

Но DoubleRounder дает сбой в нескольких сценариях. Например:

Метод Math.

п :

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

Заключение

В этой статье мы рассмотрели различные методы округления чисел до n знаков после запятой, доступные в Java.

Можно просто отформатировать вывод без изменения значения или округлить переменную с помощью вспомогательного метода или подключаемых библиотек.

Код, использованный в этой статье, доступен на GitHub .

Пожалуйста, оставляйте ваши мнения по текущей теме материала. За комментарии, дизлайки, подписки, отклики, лайки огромное вам спасибо!

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

Округление в Java

В Java есть целочисленные типы данных (long, int, char, short, byte) и есть типы с плавающей точкой (float, double), а по-русски — «с плавающей запятой» . Преобразование значений с дробной частью в целочисленные полезно для упрощения вычислений, последующего чтения и для сокращения объемов используемой памяти. Сделать это можно так:

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

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

Содержание

  1. Обзор
  2. Десятичные числа в Java
  3. Форматирование десятичного числа
  4. Округление Double с помощью BigDecimal
  5. Округление чисел с плавающей запятой с помощью DoubleRounder
  6. Метод Math.round()
  7. Заключение

Обзор

В этой статье мы рассмотрим, как в Java округлить число до n десятичного знаков.

Десятичные числа в Java

Java предоставляет два примитивных типа, которые могут использоваться для хранения десятичных чисел: float и double . Double — это тип данных, используемый по умолчанию:

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

Форматирование десятичного числа

Если нужно вывести десятичное число с n знаками после запятой, можно отформатировать выходную строку:

Также можно округлить значение с помощью класса DecimalFormat :

Этот класс позволяет настроить процесс округления числа.

Округление Double с помощью BigDecimal

Чтобы округлить тип double до n знаков после запятой, можно написать helper-метод :

Обратите внимание, что при создании экземпляра класса BigDecimal мы должны всегда использовать конструктор BigDecimal(String) . Это позволяет избежать проблем с представлением неточных значений.

Можно сделать то же самое, используя библиотеку Apache Commons Math :

Актуальную версию этой библиотеки можно найти здесь . Для округления чисел применяется метод Precision.round() , который принимает два аргумента — значение и масштаб:

По умолчанию он использует тот же метод округления HALF_UP, что хэлпер. Поэтому результаты должны быть одинаковыми.

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

Округление чисел с плавающей запятой с помощью DoubleRounder

DoubleRounder — это утилита из библиотеки decimal4j . Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой. п :

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

Заключение

В этой статье мы рассмотрели различные методы округления чисел до n знаков после запятой, доступные в Java.

Можно просто отформатировать вывод без изменения значения или округлить переменную с помощью вспомогательного метода или подключаемых библиотек.

Код, использованный в этой статье, доступен на GitHub .

Данная публикация представляет собой перевод статьи « How to Round a Number to N Decimal Places in Java » , подготовленной дружной командой проекта Интернет-технологии.ру

Я прочитал много вопросов о stackoverflow, но ни один из них не работает для меня. Я использую math.round() для округления. это код:

вывод я get: 123 , но я хочу, чтобы он был 123.14 . я читал, что добавление *100/100 поможет, но, как вы можете видеть, мне не удалось заставить его работать.

абсолютно необходимо, чтобы как входные, так и выходные данные были двойными.

было бы большой помощью, если вы измените строку 4 вышеприведенного кода и разместите ее.

Ну, это работает.

Или, как сказал @Rufein

это сделает это и для вас.

Вернитесь к своему коду и замените 100 на 100.00 и дайте мне знать, если он работает. Однако, если вы хотите быть формальным, попробуйте следующее:

Я знаю, что это вопрос 2 года, но поскольку каждый орган сталкивается с проблемой, чтобы округлить значения в какой-то момент времени. Я хотел бы поделиться другим способом, который может дать нам округленные значения для любого масштаба, используя BigDecimal class. Здесь мы можем избежать дополнительных шагов, необходимых для получения окончательного значения, если мы используем DecimalFormat(«0.00») или используя Math.round(a * 100) / 100 .

Эта программа даст нам ниже выход

Добавление «D» в 100 делает его двойным литералом, поэтому полученный результат будет иметь точность

Это длинное, но полное доказательство, никогда не сработает

Просто передайте свой номер этой функции как двойной, он вернет вам округление десятичного значения до ближайшего значения 5;

если 4. 25, выход 4.25

если 4.20, выход 4.20

если 4.24, Output 4.20

если 4.26, выход 4.30

если вы хотите округлить до двух знаков после запятой, затем используйте

если до 3-х мест, новый DecimalFormat ( «#. ###» )

если до n мест, новый DecimalFormat ( «#. nTimes #» )

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

В Java есть целочисленные типы данных (long, int, char, short, byte) и есть типы с плавающей точкой (float, double), а по-русски — «с плавающей запятой» . Преобразование значений с дробной частью в целочисленные полезно для упрощения вычислений, последующего чтения и для сокращения объемов используемой памяти. Сделать это можно так:

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

Python | Модуль decimal

Последнее обновление: 04.02.2022

При работе с числами с плавающей точкой (то есть float) мы сталкиваемся с тем, что в результате вычислений мы получаем не совсем верный результат:


number = 0. 1 + 0.1 + 0.1
print(number)       # 0.30000000000000004

Проблему может решить использование функции round(), которая округлит число. Однако есть и другой способ, который заключается в использовании встроенного модуля decimal.

Ключевым компонентом для работы с числами в этом модуле является класс Decimal. Для его применения нам надо создать его объект с помощью конструктора. В конструктор передается строковое значение, которое представляет число:


from decimal import Decimal

number = Decimal("0.1")

После этого объект Decimal можно использовать в арифметических операциях:


from decimal import Decimal

number = Decimal("0.1")
number = number + number + number
print(number)       # 0.3

В операциях с Decimal можно использовать целые числа:


number = Decimal("0.1")
number = number + 2

Однако нельзя смешивать в операциях дробные числа float и Decimal:


number = Decimal("0. 1")
number = number + 0.1	# здесь возникнет ошибка

С помощью дополнительных знаков мы можем определить, сколько будет символов в дробной части числа:


number = Decimal("0.10")
number = 3 * number
print(number)       # 0.30

Строка «0.10» определяет два знака в дробной части, даже если последние символы будут представлять ноль. Соответственно «0.100» представляет три знака в дробной части.

Округление чисел

Объекты Decimal имеют метод quantize(), который позволяет округлять числа. В этот метод в качестве первого аргумента передается также объект Decimal, который указывает формат округления числа:


from decimal import Decimal

number = Decimal("0.444")
number = number.quantize(Decimal("1.00"))
print(number)       # 0.44

number = Decimal("0.555678")
print(number.quantize(Decimal("1.00")))       # 0.56

number = Decimal("0.999")
print(number.quantize(Decimal("1. 00")))       # 1.00

Используемая строка «1.00» указывает, что округление будет идти до двух знаков в дробной части.

По умолчанию округление описывается константой ROUND_HALF_EVEN, при котором округление происходит до ближайшего четного числа, если округляемая часть равна 5. Например:


from decimal import Decimal, ROUND_HALF_EVEN


number = Decimal("10.025")      # 2 - ближайшее четное число
print(number.quantize(Decimal("1.00"), ROUND_HALF_EVEN))       # 10.02

number = Decimal("10.035")      # 4 - ближайшее четное число
print(number.quantize(Decimal("1.00"), ROUND_HALF_EVEN))       # 10.04

Стратегия округления передается в качестве второго параметра в quantize.

Строка «1.00» означает, что округление будет идти до двух чисел в дробной части. Но в первом случае «10.025» — вторым знаком идет 2 — четное число, поэтому, несмотря на то, что следующее число 5, двойка не округляется до тройки.

Во втором случае «10.035» — вторым знаком идет 3 — нечетное число, ближайшим четным числом будет 4, поэтому 35 округляется до 40.

Данное поведение при округлении, возможно, не всем покажется желательным, и в этом случае его можно переопределить, использовав одну из следующих констант:

  • ROUND_HALF_UP: округляет число в сторону повышения, если после него идет число 5 или выше

  • ROUND_HALF_DOWN: округляет число в сторону повышения, если после него идет число больше 5

    
    number = Decimal("10.026")
    print(number.quantize(Decimal("1.00"), ROUND_HALF_DOWN))       # 10.03
    
    number = Decimal("10.025")
    print(number.quantize(Decimal("1.00"), ROUND_HALF_DOWN))       # 10.02
    
  • ROUND_05UP: округляет 0 до единицы, если после него идет число 5 и выше

    
    number = Decimal("10.005")
    print(number.quantize(Decimal("1.00"), ROUND_05UP))       # 10.01
    
    number = Decimal("10. 025")
    print(number.quantize(Decimal("1.00"), ROUND_05UP))       # 10.02
    
  • ROUND_CEILING: округляет число в большую сторону вне зависимости от того, какое число идет после него

    
    number = Decimal("10.021")
    print(number.quantize(Decimal("1.00"), ROUND_CEILING))       # 10.03
    
    number = Decimal("10.025")
    print(number.quantize(Decimal("1.00"), ROUND_CEILING))       # 10.03
    
  • ROUND_FLOOR: не округляет число вне зависимости от того, какое число идет после него

    
    number = Decimal("10.021")
    print(number.quantize(Decimal("1.00"), ROUND_FLOOR))       # 10.02
    
    number = Decimal("10.025")
    print(number.quantize(Decimal("1.00"), ROUND_FLOOR))       # 10.02
    

НазадСодержаниеВперед

описание процесса, особенности, примеры OTUS

Задумываться над тем, как округлить число, может не только математик, но и программист. Этот процесс пригодится при разнообразных сложных вычислениях. В данной статье будет рассказано о том, как правильно действовать с округлением цифр в том или ином случае. А еще – рассмотрены несколько наглядных примеров программного кода в некоторых популярных языках программирования.

Что это такое

Округление чисел – создание числа, которое обладает в своем составе меньшим количеством чисел. Они будут менее точными, нежели неокругленные, но используются на практике часто. Работать предстоит как с целыми, так и с дробными компонентами.

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

Округление – замена числа на его приближенное значение с заданной заранее точностью. Записывается с меньшим количеством значащих цифр. Модуль разности между первоначальным и округленным результатом носит название ошибки округления.

Общие принципы

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

  1. Если в процессе первая из цифр, которую нужно отделить, меньше 5-ки, то последняя из оставленных остается без последующих корректировок.
  2. Когда первая убираемая больше 5, последняя оставляемая будет увеличиваться на единицу. Происходит усиление.
  3. При отсечении 5, когда за ней нет значащих компонентов, округление будет производиться на ближайшее четное. Это значит, что последний оставляемый элемент остается без изменений, если он четный. Усиливается – когда нечетный.

Эти принципы помогут быстрее разобраться в том, как грамотно округлять цифры. Забыв о базе, можно наделать немало ошибок.

До целого

Далее следует рассмотреть возможные варианты проведения соответствующей операции. Самый простой подход – округление до целых. Здесь действует такой принцип:

  1. Для того, чтобы провести операцию, требуется отбросить запятую и все цифры, которые стоят после нее.
  2. Если первая отбрасываемая меньше 5 – изменений не требуется.
  3. Когда «стирается» от 5 до 9 включительно, предыдущее увеличивается на единицу.

Элементарный пример: дано 0,53. Его округление до целого – это 1. Результат получен благодаря тому, что после запятой стоит 5. Она увеличивает прежний результат на единицу.

До десятых

Округлить число можно до десятых. Для этого необходимо:

  1. Оставить после запятой всего одну составляющую. Остальные – отбросить.
  2. Когда первое отбрасываемое от 0 до 4, предыдущая цифра остается без корректировок.
  3. Если первое убираемое – это 5-9, предыдущее увеличивается на +1.

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

Примеры:

  1. Нужно округлить 24,75. На выходе получится 24,8, так как первое отбрасываемое значение равно 5.
  2. Округление 55,31. Результат – 55,3. Получается за счет того, что первая цифра после запятой – это 3.
  3. 89,961 округляется до 90. Первая исключаемая цифра – это 6. На увеличивает на единицу 9, что приводит к «росту» целого.

Такие расчеты можно осуществлять самостоятельно или при помощи специальных приложений – онлайн калькуляторов.

До сотых

Можно округлить заданное число до сотых. Для этого стоит уяснить следующие правила и принципы:

  1. После запятой требуется оставить две цифры. Остальные элементы просто отбрасываются.
  2. Если первая исключаемая — это 0, 1, 2, 3 или 4, то предыдущая остается без корректировок.
  3. В противном случае требуется увеличить предыдущее значение на единицу.

Нужно поработать с 33,786. Его приближенное значение – 33,79. Связано с тем, что первая отбрасываемая цифра – это 6.

Если нужно получить приближенное от 5,972, оно будет равно 5,97. Первый исключаемый элемент – 2, который не требует усиления.

До тысячных

Можно округлить заданное число до тысячных. Для этого предстоит руководствоваться такими принципами и правилами:

  1. После запятой оставить только три элемента. Оставшуюся часть убрать.
  2. Когда первое отбрасываемое значение менее 5, предыдущий элемент остается без корректировок.
  3. Если отбрасываемая первая от 5 до 9 включительно, предыдущую требуется усилить. А именно – увеличить на единицу.

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

Дано 4,7864. Его приближенное значение окажется 4,786. Связано это с тем, что отбрасываемая цифра – это 4. Она не требует усиления предыдущего элемента.

Если требуется округлить 79,99982, то «на выходе» получится 80,000. Отбрасываемый компонент – 8. В этом случае требуется провести усиление предыдущей «записи».

До десятков

Чтобы округлить заданное число до десятков, следует вспомнить понятие разряда в математике. Для того, чтобы получить приближенное значение у целого с точностью до десятков, требуется руководствоваться следующими принципами:

  1. Цифру в разряде единиц заменить нулем.
  2. Если у рассматриваемого «объекта» есть элементы после запятой – их нужно отбросить.
  3. Когда отбрасываемая цифра 0-4, предыдущая остается без корректировок.
  4. В противном случае необходимо увеличить предыдущий элемент на единицу.

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

Дана цифра 564, для которого необходимо получить приближенное значение с точностью до десятых. С этой задачей справится специализированный online калькулятор. Но и самостоятельно произвести подсчеты не трудно.

В разряде единиц стоит 4. Она заменяется нулем. Предыдущая цифра по этой же причине не усиливается. Поэтому результатом проведенной операции будет 560.

Если же требуется округлить число 787, результатом будет 790. Связано это с тем, что отбрасываемая цифра в разряде единиц – это 7. Она требуется увеличения на единицу предыдущего элемента.

В случае с наличием дробной части и получением приближенного значения, действовать требуется аналогичным образом. Пусть дано 745,33. Приближенное значение с точностью до десятков – это 750. Часть после запятой отбрасывается. В разряде единиц стоит 5, которая предусматривает усиление предыдущего элемента на единицу.

До сотен

Можно округлять заданные числа до сотен. В этом случае требуется:

  1. При наличии дробной части – просто отбросить оную.
  2. Элементы в разрядах единиц и десятков заменить на нули.
  3. Если отбрасываемая цифра менее 5, предыдущая не корректируется.
  4. В противном случае нужно увеличить оную на +1.

Если округлить число 7126 до сотен, получится приближенное значение 7100. Дробной части нет, а первый отбрасываемый элемент – это 2. Усиление здесь не требуется.

В случае с 9855, приближенным значением окажется 9900. Отбрасываемая цифра – это 5, требующая усиление предыдущего элемента на единицу.

С дробной частью ситуация обстоит аналогичным образом. 45632,22 с точностью до сотен – это 45600. Дробная часть отбрасывается. Первая составляющая, исключаемая из значения – 3. Она не требует усиления.

До тысяч

Округлить имеющееся число до тысяч тоже не слишком трудно:

  1. При наличии дробной части – отбросить ее полностью.
  2. Разряды единиц, десятков и сотен заменить на нули.
  3. Если первое отбрасываемое – до 4 включительно, предыдущий элемент не изменяется.
  4. В противном случае происходит увеличение на единицу.

Если округлить число 43177 до тысяч, приближенным значением окажется 43000. Первый отбрасываемый элемент – это 1. Он не требует каких-либо корректировок.

При работе с 1879732 результатом будет 1880000. Отбрасываемый первый элемент – это 7. Он приводит к увеличению 9-ки. Проверить результат можно через онлайн калькулятор.

Чтобы лучше разбираться в том, как округлять заданные числа, стоит вспомнить школьную программу по математике. А еще можно записаться на специализированные онлайн курсы по программированию. Там научат не только округлять, но и писать программные коды разного уровня сложности.

Преимущества курсов

Обучающие компьютерные курсы:

  1. Позволяют получать необходимые знания тогда, когда это удобно. Для начала операции требуется только подключение к интернету. Смотреть занятия удастся и с компьютеров, и с мобильных гаджетов.
  2. Рассчитаны на разные возрастные категории.
  3. Делятся по уровню знаний – предложения есть как для новичков, так и для опытных разработчиков.
  4. Предлагают бесценный практический опыт и кураторство знающими разработчиками.
  5. Рассчитаны на срок от нескольких месяцев до года. За этот период можно освоить одну или несколько программ.

По завершении обучения «студент» получит сертификат установленного образца, при помощи которого удастся подтвердить знания в выбранной заранее области.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

Также, возможно, вам будет интересен следующий курс:

Число с запятой java — dj-sensor.

ru

Содержание

  1. Обзор
  2. Десятичные числа в Java
  3. Форматирование десятичного числа
  4. Округление Double с помощью BigDecimal
  5. Округление чисел с плавающей запятой с помощью DoubleRounder
  6. Метод Math.round()
  7. Заключение
  8. 4 ответа 4

Обзор

В этой статье мы рассмотрим, как в Java округлить число до n десятичного знаков.

Десятичные числа в Java

Java предоставляет два примитивных типа, которые могут использоваться для хранения десятичных чисел: float и double . Double — это тип данных, используемый по умолчанию:

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

Форматирование десятичного числа

Если нужно вывести десятичное число с n знаками после запятой, можно отформатировать выходную строку:

Также можно округлить значение с помощью класса DecimalFormat :

Этот класс позволяет настроить процесс округления числа.

Округление Double с помощью BigDecimal

Чтобы округлить тип double до n знаков после запятой, можно написать helper-метод :

Обратите внимание, что при создании экземпляра класса BigDecimal мы должны всегда использовать конструктор BigDecimal(String) . Это позволяет избежать проблем с представлением неточных значений.

Можно сделать то же самое, используя библиотеку Apache Commons Math :

Актуальную версию этой библиотеки можно найти здесь . Для округления чисел применяется метод Precision.round() , который принимает два аргумента — значение и масштаб:

По умолчанию он использует тот же метод округления HALF_UP, что хэлпер. Поэтому результаты должны быть одинаковыми.

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

Округление чисел с плавающей запятой с помощью DoubleRounder

DoubleRounder — это утилита из библиотеки decimal4j . Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой. п :

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

Заключение

В этой статье мы рассмотрели различные методы округления чисел до n знаков после запятой, доступные в Java.

Можно просто отформатировать вывод без изменения значения или округлить переменную с помощью вспомогательного метода или подключаемых библиотек.

Код, использованный в этой статье, доступен на GitHub .

Данная публикация представляет собой перевод статьи « How to Round a Number to N Decimal Places in Java » , подготовленной дружной командой проекта Интернет-технологии.ру

Ребят всем привет. Есть число double res , допустим, 0.1321231; . Как вывести только 0.13 ?

Знаю, что можно вывести так:

но только что это значит? Как можно вывести стандартно через System.out.println ?

4 ответа 4

printf подразумевает форматирование строки в дополнение к выводу, только и всего. Для получения форматированной строки без вывода надо использовать String.format().

Чуть правильнее и быстрее будет использовать DecimalFormat.

Само собой, строку формата «#0.00» стоит вынести куда-нибудь в константу, возможно, общую на все приложение.

Целиком вытаскивать объект new DecimalFormat(«#0.00») в константу, напротив не стоит из соображений потокобезопасности.

Выигрыш в производительности по сравнению со String.format() может быть что-то около 2х раз. Плюс DecimalFormat использует настройки локали для разделителя целой и дробной частей.

Вот этот способ отлично оставляет две цифры после запятой.

Если java не поддерживает DecimalFormat , то придется так:

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

В Java есть целочисленные типы данных (long, int, char, short, byte) и есть типы с плавающей точкой (float, double), а по-русски — «с плавающей запятой» . Преобразование значений с дробной частью в целочисленные полезно для упрощения вычислений, последующего чтения и для сокращения объемов используемой памяти. Сделать это можно так:

Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.

Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:

Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.

Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:

Java округление в большую сторону выполняется методом CEIL:

Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:

Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:

  1. UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
  2. DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
  3. CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
  4. FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
  5. HALF_UP — округление в большую сторону в случае числа вида 0.5;
  6. HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
  7. HALF_EVEN — классическое округление

Выглядит подобное округление чисел так:

Цифра в скобках указывает в java округление до 2 знаков double типа.

Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.

  • Автор: Мария Сухоруких