Java. Класс Math. Функции округления

Класс Math. Функции округления

Перед изучением данной темы рекомендуется ознакомиться со следующими темами:


Содержание


Поиск на других ресурсах:

1. Перечень функций округления

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

  • abs() – возвращает абсолютное значение аргумента;
  • ceil() – наименьшее целое, которое больше или равно указанного аргумента;
  • floor() – наибольшее целое, которое меньше или равно указанного аргумента;
  • floorDiv() – возвращает результат целочисленного деления двух целых чисел;
  • floorMod() – получить наименьший целый остаток от деления двух целых чисел;
  • max() – возвращает большее из двух значений;
  • min() – возвращает меньшее из двух значений;
  • nextAfter() – получить следующее значение аргумента в заданном направлении;
  • nextDown() – получить следующее значение, которое меньше значения аргумента;
  • nextUp() – получить следующее значение от аргумента в положительном направлении;
  • rint() – получить ближайшее целое значение к указанному аргументу;
  • round() – получить аргумент, округленный до ближайшего целого значения;
  • ulp() – получить количество единиц в последнем знаке для указанного аргумента.

 

2. Функция abs(). Получить абсолютное значение указанного аргумента

С помощью функции abs() можно получить абсолютное значение аргумента. Общая форма объявления функции для базовых числовых типов:

static int abs(int value);
static long abs(long value);
static float abs(float value);
static double abs(double value);

здесь

  • value – значение одного из примитивных числовых типов.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция abs() - модуль числа
    int a = -8;
    double x = -2.432;
    float f = -1.43f;

    int aa = Math.abs(a);
    System.out.println("aa = " + aa);

    double xx;
    xx = Math.abs(x);
    System.out.println("xx = " + xx);

    float ff = Math.abs(f);
    System.out.println("ff = " + ff);
  }
}

Результат

aa = 8
xx = 2.432
ff = 1.43

 

3. Функция ceil(). Наименьшее целое, которое больше или равно заданного аргумента

Общая форма объявления функции:

static double ceil(double value);

здесь

  • value – аргумент, из которого нужно извлечь целое значение.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция ceil() - ближайшее целое типа double, которое больше равно аргументу
    double x = -7.65;
    double xx;
    xx = Math.ceil(x); // xx = -7.0
    System.out.println("xx = " + xx);

    float f = 11.43f; // ff = 12.0
    float ff = (float)Math.ceil((double)f);
    System.out.println("ff = " + ff);
  }
}

Результат

xx = -7.0
ff = 12.0

 

4. Функция floor(). Наибольшее целое, которое меньше или равно заданного аргумента

Общая форма объявления функции:

static double floor(double value);

здесь

  • value – аргумент, из которого получается ближайшее целое типа double.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция floor()
    // 1. Для типа float
    float f1 = 2.83f;
    float resF = (float)Math.floor((double)f1);
    System.out.println("floor(2.83) = " + resF);

    // 2. Для типу double
    double d1 = -7.75;
    double resD = (double)Math.floor(d1);
    System.out.println("floor(-7.75) = " + resD);
  }
}

Результат

floor(2.83) = 2.0
floor(-7.75) = -8.0

 

5. Функция floorDiv(). Результат целочисленного деления двух целых чисел

Общая форма объявления функции для типов int и long:

static int floorDiv(int divisible, int divider);
static int floorDiv(long divisible, long divider);

здесь

  • divisible – делимое значение;
  • divider – делитель – значение, на которое делится число.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция floorDiv()
    // 1. Для типа int
    int resInt = Math.floorDiv(117, 20);
    System.out.println("117/20 = " + resInt);

    // 2. Для типа long
    long resLong = Math.floorDiv(2300L, 83L);
    System.out.println("2300/83 = " + resLong);
  }
}

Результат

117/20 = 5
2300/83 = 27

 

6. Функция floorMod(). Наименьшая целая оставшаяся часть от деления двух целых чисел

Функция floorMod() возвращает наименьший остаток от деления двух целых чисел. Общая форма объявления функции:

static int floorMod(int divisible, int divider);
static int floorMod(long divisible, long divider);

здесь

  • divisible – делимое значение;
  • divider – делитель – значение, на которое делится число.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция floorMod()
    // 1. Для типа int
    int i1 = 23;
    int i2 = 11;
    int resI = Math.floorMod(i1, i2);
    System.out.println("230/11 = " + resI);

    // 2. Для типа long
    long l1 = 100L;
    long l2 = 9L;
    System.out.println("100L / 9 = " + Math.floorMod(l1, l2));
  }
}

Результат

230/11 = 1
100L / 9 = 1

 

7. Функция max(). Определение большего из двух значений

Функция max() возвращает максимальное из двух заданных значений. Общая форма объявления функции для примитивных числовых типов:

static int max(int x, int y);
static long max(long x, long y);
static float max(float x, float y);
static double max(double x, double y);

здесь

  • x, y – значения, из которых определяется большее.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция max() - максимальное из двух чисел
    // 1. Для типа int
    int i1 = 35;
    int i2 = 110;
    int maxInt = Math.max(i1, i2);
    System.out.println("max(35, 110) = " + maxInt);

    // 2. Для типа double
    System.out.println("max(2.88, 3.11) = " + Math.max(2.88, 3.11));
  }
}

Результат

max(35, 110) = 110
max(2.88, 3.11) = 3.11

 

8. Функция min(). Определение меньшего из двух значений

Функция min() возвращает минимум из двух заданных значений. Согласно документации объявления функции для примитивных числовых типов выглядят:

static int min(int x, int y);
static long min(long x, long y);
static float min(float x, float y);
static double min(double x, double y);

здесь

  • x, y – значения, из которых определяется наименьшее.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция min() - минимальное из двух чисел
    // 1. Для типа long
    long i1 = 35;
    long i2 = 110;
    long minInt = Math.min(i1, i2);
    System.out.println("min(35, 110) = " + minInt);

    // 2. Для типа float
    System.out.println("min(2.88, 3.11) = " + Math.min(2.88, 3.11));
  }
}

Результат

min(35, 110) = 35
min(2.88, 3.11) = 2.88

 

9. Функция nextAfter(). Получить следующее значение аргумента в заданном направлении

С помощью функции nextAfter() можно получить следующее значение аргумента в заданном направлении для чисел с плавающей запятой. Согласно документации объявление функции следующее:

static double nextAfter(double start, double direction);
static float nextAfter(float start, double direction);

здесь

  • start – начальное значение, из которого задается направление;
  • direction – число, определяющее направление изменения начального значения.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция nextAfter() - получить значение аргумента в заданном направлении
    // 1. Для типа double
    double start1 = 35.2;
    double direction1 = 1.5;
    double resD = Math.nextAfter(start1, direction1);
    System.out.println("nextAfter(35.2, 1.5) = " + resD);

    // 2. Для типа float
    float start2 = -18.3f;
    float direction2 = -2.4f;

    float resF = Math.nextAfter(start2, direction2);
    System.out.println("nextAfter(-18.3, -2.4) = " + resF);
  }
}

Результат

nextAfter(35.2, 1.5) = 35.199999999999996
nextAfter(-18.3, -2.4) = -18.299997

 

10. Функция nextDown(). Получить следующее значение, которое меньше значения аргумента

С помощью функции nextDown() можно получить ближайшее следующее значение, которое меньше значения аргумента. Согласно документации объявление функции следующее:

static float nextDown(float val);
static double nextDown(double val);

здесь

  • val – значение, относительно которого получается предыдущее значение.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция nextDown() - получить следующее значение аргумента в направлении убывания
    // 1. Для типа double
    double value = 35.2;
    double resD = Math.nextDown(value);
    System.out.println("nextDown(35.2) = " + resD);

    // 2. Для типа float
    float value2 = 8.3f;
    System.out.println("nextDown(8.3f) = " + Math.nextDown(value2));
  }
}

Результат

nextDown(35.2) = 35.199999999999996
nextDown(8.3f) = 8.299999

 

11. Функция nextUp(). Получить следующее значение от аргумента в направлении возрастания

Согласно документации объявления функции следующее:

static float nextUp(float val);
static double nextUp(double val);

здесь

  • val – значение, относительно которого получается следующее значение.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция nextUp() - получить следующее значение аргумента в направлении роста
    // 1. Для типа double
    double value = 35.2;
    double resD = Math.nextUp(value);
    System.out.println("nextUp(35.2) = " + resD);

    // 2. Для типа float
    float value2 = 8.3f;
    System.out.println("nextUp(8.3f) = " + Math.nextUp(value2));
  }
}

Результат

nextUp(35.2) = 35.20000000000001
nextUp(8.3f) = 8.300001

 

12. Функция rint(). Получить ближайшее целое значение к указанному аргументу

В соответствии с документацией объявление функции следующее:

static double rint(double arg);

здесь

  • arg – исходный аргумент.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция rint() - получить ближайшее целое значение к указанному аргументу
    // 1. Положительное число
    double arg = 5.2;
    double res = Math.rint(arg);
    System.out.println("rint(5.2) = " + res);

    // 2. Отрицательное число
    arg = -7.65;
    res = Math.rint(arg);
    System.out.println("rint(-7.65) = " + res);
  }
}

Результат

rint(5.2) = 5.0
rint(-7.65) = -8.0

 

13. Функция round(). Получить аргумент, округленный до ближайшего целого значения

Согласно документации объявление функции следующее:

static long round(double arg);

здесь

  • arg – исходный аргумент.

 

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция round() - получить аргумент, округленный до ближайшего целого значения
    // 1. Положительное число
    double arg = 5.6;
    double res = Math.round(arg);
    System.out.println("round(5.6) = " + res);

    res = Math.round(5.2);
    System.out.println("round(5.2) = " + res);

    // 2. Отрицательное число
    arg = -7.65;
    res = Math.round(arg);
    System.out.println("round(-7.65) = " + res);

    res = Math.round(-7.15);
    System.out.println("round(-7.15) = " + res);
  }
}

Результат

round(5.6) = 6.0
round(5.2) = 5.0
round(-7.65) = -8.0
round(-7.15) = -7.0

 

14. Функция ulp(). Получить количество единиц в последнем знаке для указанного аргумента

Согласно документации объявление функции следующее:

static float ulp(float arg);
static double ulp(double arg);

тут

  • arg – исходный аргумент.

 

Приклад.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция ulp() - получить количество единиц
    //  в последнем знаке для указанного аргумента

    // 1. Для типа double
    double argD = 5.618;
    double resD = Math.ulp(argD);
    System.out.println("ulp(5.618) = " + resD);
    System.out.println("ulp(-2.3) = " + Math.ulp(-2.3));

    // 2. Для типа float
    float argF = 5.618f;
    float resF = Math.ulp(argF);
    System.out.println("ulp(5.618f) = " + resF);
    System.out.println("ulp(-2.3f) = " + Math.ulp(-2.3f));
  }
}

Результат

ulp(5.618) = 8.881784197001252E-16
ulp(-2.3) = 4.440892098500626E-16
ulp(5.618f) = 4.7683716E-7
ulp(-2.3f) = 2.3841858E-7

 


Связанные темы