Округление вещественных чисел в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Округление числа означает получение его приблизительного значения. В Java существует несколько способов округления чисел с плавающей точкой. В этом лабораторном занятии (Lab) мы научимся округлять числа с использованием различных методов в Java.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/output("Output") java/BasicSyntaxGroup -.-> java/math("Math") java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/format("Format") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") java/SystemandDataProcessingGroup -.-> java/system_methods("System Methods") subgraph Lab Skills java/output -.-> lab-117452{{"Округление вещественных чисел в Java"}} java/math -.-> lab-117452{{"Округление вещественных чисел в Java"}} java/method_overloading -.-> lab-117452{{"Округление вещественных чисел в Java"}} java/format -.-> lab-117452{{"Округление вещественных чисел в Java"}} java/math_methods -.-> lab-117452{{"Округление вещественных чисел в Java"}} java/system_methods -.-> lab-117452{{"Округление вещественных чисел в Java"}} end

Округление с использованием метода printf()

Мы можем использовать метод System.out.printf() для вывода округленного числа в консоль. Мы можем указать количество знаков после запятой, до которых хотим округлить число, с помощью модификаторов точности.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.printf("Pi: %.2f %n", pi); // выводит Pi: 3.14
  System.out.printf("One Third: %.3f %n", oneThird); // выводит One Third: 0.333
  System.out.printf("Gravitation Acceleration(g): %.0f", g); // выводит Gravitation Acceleration(g): 10
}

Чтобы запустить код, откройте терминал и перейдите в директорию, где находится файл с кодом. Затем скомпилируйте код с помощью команды javac filename.java. После этого запустите его с помощью команды java filename.

Округление с использованием метода DecimalFormat()

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

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  DecimalFormat d1 = new DecimalFormat("#.##");
  DecimalFormat d2 = new DecimalFormat("#.###");
  DecimalFormat d3 = new DecimalFormat("#");

  System.out.println("Pi: " + d1.format(pi)); // выводит Pi: 3.14
  System.out.println("One Third: " + d2.format(oneThird)); // выводит One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + d3.format(g)); // выводит Gravitation Acceleration(g): 10
}

Чтобы запустить код, откройте терминал и перейдите в директорию, где находится файл с кодом. Затем скомпилируйте код с помощью команды javac filename.java. После этого запустите его с помощью команды java filename.

Округление с использованием метода Math.round()

Мы можем использовать метод Math.round() для округления десятичных чисел. Его можно применять, когда нужно округлить число до целого (с нулевым количеством знаков после запятой).

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + Math.round(pi)); // выводит Pi: 3
  System.out.println("One Third: " + Math.round(oneThird)); // выводит One Third: 0
  System.out.println("Gravitation Acceleration(g):" + Math.round(g)); // выводит Gravitation Acceleration(g): 10
}

Для запуска кода откройте терминал и перейдите в директорию, где находится файл с кодом. Затем скомпилируйте код с помощью команды javac filename.java. После этого запустите его с помощью команды java filename.

Создание собственного метода округления

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

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

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + round(pi, 2)); // выводит Pi: 3.14
  System.out.println("One Third: " + round(oneThird, 3)); // выводит One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + round(g, 0)); // выводит Gravitation Acceleration(g): 10.0
}

Для запуска кода откройте терминал и перейдите в директорию, где находится файл с кодом. Затем скомпилируйте код с помощью команды javac filename.java. После этого запустите его с помощью команды java filename.

Округление с использованием BigDecimal

Мы можем использовать метод round() класса BigDecimal для округления числа. Следующий код демонстрирует, как округлить десятичное число с использованием метода round() класса BigDecimal.

public static void main(String args[]) {
  BigDecimal pi = new BigDecimal("3.14159265359");
  pi = pi.setScale(4, RoundingMode.HALF_UP); // Округляет до 4 знаков после запятой

  System.out.println("Pi: " + pi); // выводит Pi: 3.1416
}

Для запуска кода откройте терминал и перейдите в директорию, где находится файл с кодом. Затем скомпилируйте код с помощью команды javac filename.java. После этого запустите его с помощью команды java filename.

Округление любого числа, не являющегося BigDecimal, с использованием BigDecimal

Если число не является объектом типа BigDecimal, мы можем сначала преобразовать его, а затем округлить с использованием класса BigDecimal. Следующий метод можно использовать для округления чисел типа double.

public static double round(double num, int places) {
  BigDecimal b = new BigDecimal(Double.toString(num));
  b = b.setScale(places, RoundingMode.HALF_UP);
  return b.doubleValue();
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  double g = 9.807f;

  pi = round(pi, 4);
  oneThird = round(oneThird, 3);
  g = round(g, 0);

  System.out.println("Pi: " +pi); // выводит Pi: 3.1416
  System.out.println("One Third: " + oneThird); // выводит One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + g); // выводит Gravitation Acceleration(g): 10.0
}

Для запуска кода откройте терминал и перейдите в директорию, где находится файл с кодом. Затем скомпилируйте код с помощью команды javac filename.java. После этого запустите его с помощью команды java filename.

Резюме

В этом практическом занятии (лабораторной работе) мы изучили различные методы округления десятичных чисел на Java. Мы использовали printf() и DecimalFormat() для простого округления, Math.round() для округления до целого числа (с нулевым количеством знаков после запятой), BigDecimal для точного округления и DoubleRounder для округления с использованием библиотеки decimal4j. Мы также создали собственный метод для округления любого десятичного числа до заданного количества знаков после запятой.