Перейти к содержимому

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

  • автор:

13.11. Java – Метод Math.round()

Метод Math.round() – возвращает целое число, long или int, ближайшее к вещественному числу, double или float, аргумента. Иными словами – округляет дробь до целого числа.

Синтаксис

Метод имеет следующие варианты округления до целого числа:

long round(double d) int round(float f) 

Параметры

Подробная информация о параметрах:

  • d – double или float примитивный тип данных.
  • f – тип данных float.

Возвращаемое значение

  • В Java Math.round() возвращает целое число (long или int), ближайшее к вещественному числу, double или float, аргумента.

Пример

public class Test< public static void main(String args[])< double d1 = 1.49; double d2 = 1.50; double d3 = 1.75; double d4 = -1.49; double d5 = -1.50; double d6 = -1.75; float f1 = 10; float f2 = 9f; float f3 = -10; float f4 = -9f; System.out.println("d1 = " + Math.round(d1)); System.out.println("d2 = " + Math.round(d2)); System.out.println("d3 = " + Math.round(d3)); System.out.println("d4 = " + Math.round(d4)); System.out.println("d5 = " + Math.round(d5)); System.out.println("d6 = " + Math.round(d6)); System.out.println("-----------"); System.out.println("f1 = " + Math.round(f1)); System.out.println("f2 = " + Math.round(f2)); System.out.println("f3 = " + Math.round(f3)); System.out.println("f4 dos">d1 = 1 d2 = 2 d3 = 2 d4 = -1 d5 = -1 d6 = -2 ----------- f1 = 10 f2 = 9 f3 = -10 f4 = -9 

Оглавление

  • 1. Java – Самоучитель для начинающих
  • 2. Java – Обзор языка
  • 3. Java – Установка и настройка
  • 4. Java – Синтаксис
  • 5. Java – Классы и объекты
  • 6. Java – Конструкторы
  • 7. Java – Типы данных и литералы
  • 8. Java – Типы переменных
  • 9. Java – Модификаторы
  • 10. Java – Операторы
  • 11. Java – Циклы и операторы цикла
  • 11.1. Java – Цикл while
  • 11.2. Java – Цикл for
  • 11.3. Java – Улучшенный цикл for
  • 11.4. Java – Цикл do..while
  • 11.5. Java – Оператор break
  • 11.6. Java – Оператор continue
  • 12. Java – Операторы принятия решений
  • 12.1. Java – Оператор if
  • 12.2. Java – Оператор if..else
  • 12.3. Java – Вложенный оператор if
  • 12.4. Java – Оператор switch..case
  • 12.5. Java – Условный оператор (? 🙂
  • 13. Java – Числа
  • 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
  • 13.2. Java – Метод compareTo()
  • 13.3. Java – Метод equals()
  • 13.4. Java – Метод valueOf()
  • 13.5. Java – Метод toString()
  • 13.6. Java – Метод parseInt()
  • 13.7. Java – Метод Math.abs()
  • 13.8. Java – Метод Math.ceil()
  • 13.9. Java – Метод Math.floor()
  • 13.10. Java – Метод Math.rint()
  • 13.11. Java – Метод Math.round()
  • 13.12. Java – Метод Math.min()
  • 13.13. Java – Метод Math.max()
  • 13.14. Java – Метод Math.exp()
  • 13.15. Java – Метод Math.log()
  • 13.16. Java – Метод Math.pow()
  • 13.17. Java – Метод Math.sqrt()
  • 13.18. Java – Метод Math.sin()
  • 13.19. Java – Метод Math.cos()
  • 13.20. Java – Метод Math.tan()
  • 13.21. Java – Метод Math.asin()
  • 13.22. Java – Метод Math.acos()
  • 13.23. Java – Метод Math.atan()
  • 13.24. Java – Метод Math.atan2()
  • 13.25. Java – Метод Math.toDegrees()
  • 13.26. Java – Метод Math.toRadians()
  • 13.27. Java – Метод Math.random()
  • 14. Java – Символы
  • 14.1. Java – Метод Character.isLetter()
  • 14.2. Java – Метод Character.isDigit()
  • 14.3. Java – Метод Character.isWhitespace()
  • 14.4. Java – Метод Character.isUpperCase()
  • 14.5. Java – Метод Character.isLowerCase()
  • 14.6. Java – Метод Character.toUpperCase()
  • 14.7. Java – Метод Character.toLowerCase()
  • 14.8. Java – Метод Character.toString()
  • 15. Java – Строки
  • 15.1. Java – Метод charAt()
  • 15.2. Java – Метод compareTo()
  • 15.3. Java – Метод compareToIgnoreCase()
  • 15.4. Java – Метод concat()
  • 15.5. Java – Метод contentEquals()
  • 15.6. Java – Метод copyValueOf()
  • 15.7. Java – Метод endsWith()
  • 15.8. Java – Метод equals()
  • 15.9. Java – Метод equalsIgnoreCase()
  • 15.10. Java – Метод getBytes()
  • 15.11. Java – Метод getChars()
  • 15.12. Java – Метод hashCode()
  • 15.13. Java – Метод indexOf()
  • 15.14. Java – Метод intern()
  • 15.15. Java – Метод lastIndexOf()
  • 15.16. Java – Метод length()
  • 15.17. Java – Метод matches()
  • 15.18. Java – Метод regionMatches()
  • 15.19. Java – Метод replace()
  • 15.20. Java – Метод replaceAll()
  • 15.21. Java – Метод replaceFirst()
  • 15.22. Java – Метод split()
  • 15.23. Java – Метод startsWith()
  • 15.24. Java – Метод subSequence()
  • 15.25. Java – Метод substring()
  • 15.26. Java – Метод toCharArray()
  • 15.27. Java – Метод toLowerCase()
  • 15.28. Java – Метод toString()
  • 15.29. Java – Метод toUpperCase()
  • 15.30. Java – Метод trim()
  • 15.31. Java – Метод valueOf()
  • 15.32. Java – Классы StringBuilder и StringBuffer
  • 15.32.1. Java – Метод append()
  • 15.32.2. Java – Метод reverse()
  • 15.32.3. Java – Метод delete()
  • 15.32.4. Java – Метод insert()
  • 15.32.5. Java – Метод replace()
  • 16. Java – Массивы
  • 17. Java – Дата и время
  • 18. Java – Регулярные выражения
  • 19. Java – Методы
  • 20. Java – Потоки ввода/вывода, файлы и каталоги
  • 20.1. Java – Класс ByteArrayInputStream
  • 20.2. Java – Класс DataInputStream
  • 20.3. Java – Класс ByteArrayOutputStream
  • 20.4. Java – Класс DataOutputStream
  • 20.5. Java – Класс File
  • 20.6. Java – Класс FileReader
  • 20.7. Java – Класс FileWriter
  • 21. Java – Исключения
  • 21.1. Java – Встроенные исключения
  • 22. Java – Вложенные и внутренние классы
  • 23. Java – Наследование
  • 24. Java – Переопределение
  • 25. Java – Полиморфизм
  • 26. Java – Абстракция
  • 27. Java – Инкапсуляция
  • 28. Java – Интерфейсы
  • 29. Java – Пакеты
  • 30. Java – Структуры данных
  • 30.1. Java – Интерфейс Enumeration
  • 30.2. Java – Класс BitSet
  • 30.3. Java – Класс Vector
  • 30.4. Java – Класс Stack
  • 30.5. Java – Класс Dictionary
  • 30.6. Java – Класс Hashtable
  • 30.7. Java – Класс Properties
  • 31. Java – Коллекции
  • 31.1. Java – Интерфейс Collection
  • 31.2. Java – Интерфейс List
  • 31.3. Java – Интерфейс Set
  • 31.4. Java – Интерфейс SortedSet
  • 31.5. Java – Интерфейс Map
  • 31.6. Java – Интерфейс Map.Entry
  • 31.7. Java – Интерфейс SortedMap
  • 31.8. Java – Класс LinkedList
  • 31.9. Java – Класс ArrayList
  • 31.10. Java – Класс HashSet
  • 31.11. Java – Класс LinkedHashSet
  • 31.12. Java – Класс TreeSet
  • 31.13. Java – Класс HashMap
  • 31.14. Java – Класс TreeMap
  • 31.15. Java – Класс WeakHashMap
  • 31.16. Java – Класс LinkedHashMap
  • 31.17. Java – Класс IdentityHashMap
  • 31.18. Java – Алгоритмы Collection
  • 31.19. Java – Iterator и ListIterator
  • 31.20. Java – Comparator
  • 32. Java – Дженерики
  • 33. Java – Сериализация
  • 34. Java – Сеть
  • 34.1. Java – Обработка URL
  • 35. Java – Отправка Email
  • 36. Java – Многопоточность
  • 36.1. Java – Синхронизация потоков
  • 36.2. Java – Межпоточная связь
  • 36.3. Java – Взаимная блокировка потоков
  • 36.4. Java – Управление потоками
  • 37. Java – Основы работы с апплетами
  • 38. Java – Javadoc

Как округлить число до N знаков после запятой в Java

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

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

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

 double PI = 3.1415; 

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

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

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

 System.out.printf("Value with 3 digits after decimal point %.3f %n", PI);   // OUTPUTS: Value with 3 digits after decimal point 3.142 

В качестве альтернативы мы можем отформатировать значение с помощью класса DecimalFormat :

 DecimalFormat df = new DecimalFormat("###.###");   System.out.println(df.format(PI)); 

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

4. Округление двойных чисел с помощью BigDecimal

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

 private static double round(double value, int places)    if (places  0) throw new IllegalArgumentException();    BigDecimal bd = new BigDecimal(Double.toString(value));   bd = bd.setScale(places, RoundingMode.HALF_UP);   return bd.doubleValue();   > 

В этом решении следует отметить одну важную вещь; при создании BigDecimal мы всегда должны использовать конструктор BigDecimal(String) . Это предотвращает проблемы с представлением неточных значений.

Мы можем добиться того же результата, используя математическую библиотеку Apache Commons :

 dependency>   groupId>org.apache.commonsgroupId>   artifactId>commons-math3artifactId>   version>3.5version>   dependency> 

Последнюю версию можно найти здесь .

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

 Precision.round(PI, 3); 

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

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

5. Округление двойников с помощью DoubleRounder

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

Мы можем получить библиотеку (последнюю версию можно найти здесь ), добавив зависимость в pom.xml :

 dependency>   groupId>org.decimal4jgroupId>   artifactId>decimal4jartifactId>   version>1.0.3version>   dependency> 

Теперь мы можем просто использовать:

 DoubleRounder.round(PI, 3); 

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

 System.out.println(DoubleRounder.round(256.025d, 2));   // OUTPUTS: 256.02 instead of expected 256.03 

6. Метод Math.round()

Другой способ округления чисел — использовать метод Math.Round() .

В этом случае мы можем контролировать n количество знаков после запятой, умножив и разделив на 10^n :

 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));   // OUTPUTS: 92.23372036854776 !!   System.out.println(roundAvoid(260.775d, 2));   // OUTPUTS: 260.77 instead of expected 260.78 

В результате этот метод указан здесь только в учебных целях.

7. Заключение

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

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

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

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

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

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

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

double PI = 3.1415

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

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

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

System.out.printf("Value with 3 digits after decimal point %.3f %n", PI); // Вывод: Значения с 3 знаками после запятой 3.142

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

DecimalFormat df = new DecimalFormat("###.###"); System.out.println(df.format(PI));

В программировании double тип данных используется для представления чисел с плавающей точкой.

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

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

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

private static double round(double value, int places)

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

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

 org.apache.commons commons-math3 3.5 

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

Precision.round(PI, 3);

В Java integer это тип данных, представляющий собой целое число.

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

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

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

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

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

 org.decimal4j decimal4j 1.0.3 

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

DoubleRounder.round(PI, 3);

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

System.out.println(DoubleRounder.round(256.025d, 2)); // OUTPUTS: 256.02 вместо ожидаемого 256.03

Метод 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

Заключение

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

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

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

Округление дробных чисел до целых

В годы моей юности, когда не было таких умных методов round/ceil/floor , округление делали примерно так:

double x=8.3; int i; i=(int )(x+0.5); //round i=(int )(x); //floor i=(int )(x+1); //ceil 

Отслеживать
ответ дан 12 мая 2017 в 8:06
81.4k 7 7 золотых знаков 73 73 серебряных знака 153 153 бронзовых знака
Эм.. Но x+1 неверно же, если число было целое.
Commented 15 мая 2017 в 9:26
Да, правда 🙂 единственное оправдание, что в те времена народ не сильно озабачивался функцией ceil
Commented 15 мая 2017 в 9:32
А ещё для отрицательных не работает, похоже.
Commented 15 мая 2017 в 9:59
@Qwertiy какой же вы право, нудный 🙂
Commented 15 мая 2017 в 10:07
Ну плюс-то поставил, можно и понудеть 😉
Commented 15 мая 2017 в 10:09

Метод Math.round() в Java возвращает long или int (целое число), ближайшее к вещественному числу, double или float , аргумента. Иными словами — осуществляет округление до целых чисел.

double d1 = 1.49; double d2 = 1.50; Math.round(d1); Math.round(d2); 
d1 = 1 d2 = 2 

Отслеживать
6,384 2 2 золотых знака 19 19 серебряных знаков 31 31 бронзовый знак
ответ дан 12 мая 2017 в 7:27
11 1 1 бронзовый знак

вот правильный код:

double b=6.7; float c=4.5f; double h=4.1; System.out.println(Math.round(h));//вывод на экран ЦЕЛОЧИСЛЕННОЕ значение типа int к блажайшему числу(4.5 будет иметь число 5) System.out.println(Math.floor(c));/*округляет число типа float вниз до ближайшего в тип double*/ System.out.print(Math.ceil(h));//округляет число типа double вверх в тип double 

Отслеживать
ответ дан 15 мая 2017 в 9:03
1 1 1 бронзовый знак
А что, у остальных тут код неправильный?
Commented 15 мая 2017 в 9:28

    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.6.17.11080

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *