Преобразование отрицательных чисел в положительные в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования отрицательного числа в положительное вы можете использовать метод Math.abs():

Java
Скопировать код
int positive = Math.abs(-5); // Теперь значение переменной positive равно 5.
Кинга Идем в IT: пошаговый план для смены профессии

Хитрый случай: Integer.MIN_VALUE

Неожиданный результат

При использовании Math.abs() с Integer.MIN_VALUE результат может быть не таким, как ожидалось:

Java
Скопировать код
int minValue = Integer.MIN_VALUE;
int positiveMinValue = Math.abs(minValue); // Получаем отрицательное число!

Такое поведение объясняется тем, что int в Java — это 32-битное целое число со знаком, и максимальное возможное отрицательное значение больше максимального положительного на единицу.

Применение тернарного оператора

В случае неработоспособности Math.abs с Integer.MIN_VALUE, тернарный оператор приходит на помощь:

Java
Скопировать код
int x = Integer.MIN_VALUE;
int positiveX = (x < 0) ? -x : x; // Для отрицательного значения x изменяем знак, иначе оставляем как есть.

Работа с суммами

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

Java
Скопировать код
int sum = 0;
for (int number : numbersArray) {
    sum += Math.abs(number); // Считаем каждое число положительным.
}

Этот подход позволяет получить общее значение, как если бы оно было измерено отнительно нуля.

Что такое модуль числа?

Краткое теоретическое пояснение

Модуль числа – это расстояние числа от нуля, которое не зависит от его положительности или отрицательности на числовой оси.

Пример для наглядности

СИмагинируем два города, расположенных на одинаковом расстоянии в 300 км от центральной точки.

Markdown
Скопировать код
Город А (-300 км) ------------------ 0 ------------------ Город B (+300 км)

Модуль расстояния от каждого города до центра — это 300 км, вне зависимости от знака.

Визуализация

Представим приведение к модулю как работу с фотонегативом:

Markdown
Скопировать код
Оригинал: [📸🌑] // Это негатив.

Применение фильтра аналогично Math.abs():

Markdown
Скопировать код
Процесс: [📸🌑]  ➡️🔆  ➡️ [📸🌕]

Итог: [📸🌕] // Теперь изображение положительное!

Работа с большими числами при помощи BigInteger

Для чисел, превосходящих ограничения int, используют BigInteger.

Java
Скопировать код
BigInteger bigNegative = new BigInteger("-1234567890123456789");
BigInteger bigPositive = bigNegative.abs(); // Получаем огромное положительное число.

Точность превыше всего: работа с float и double

Выбор между float и double

Метод Math.abs() прекрасно справляется как с float, так и с double:

Java
Скопировать код
double negativeDouble = -42.0;
double positiveDouble = Math.abs(negativeDouble); // Преобразуем отрицательное значение в положительное.

Вопрос полной точности с BigDecimal

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

Java
Скопировать код
BigDecimal piNegative = new BigDecimal("-3.14159265358979323846");
BigDecimal piPositive = piNegative.abs(); // Теперь число Пи положительное, что радует математиков.

Полезные материалы

  1. Math (Java Platform SE 8) — официальная документация на Math.abs().
  2. 'Make a negative number positive' – Stack Overflow — обсуждение методик преобразования отрицательных чисел в положительные.
  3. Integer (Java Platform SE 8) — гайд по классу Integer.
  4. Java Ternary Operator with Examples – GeeksforGeeks — руководство по использованию тернарного оператора в Java.
  5. 'Conventional name for return value' — лучшие практики именования возвращаемых значений в Java.
  6. Programming Tutorials and Source Code Examples — учебник по работе с BigInteger.
  7. Code Conventions for the Java Programming Language: Contents — стандарты написания кода на Java от Oracle для поддержания кода в чистоте и порядке.