0Pricing
Java Academy · Урок

Округление и масштаб

Управляйте точностью и режимами округления

«Округление и масштаб» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

scale и precision

У каждого объекта BigDecimal есть scale — количество цифр справа от десятичного разделителя. Значение 12.340 имеет scale, равный 3. Управляя scale, можно отображать деньги ровно с двумя знаками после запятой.

Просмотр scale

Вызовите scale(), чтобы узнать, сколько знаков после запятой хранит значение, а precision() — чтобы получить общее количество значащих цифр.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal v = new BigDecimal("12.340");
        System.out.println(v.scale());
        System.out.println(v.precision());
    }
}

setScale для фиксации знаков после запятой

setScale принудительно задаёт выбранное количество знаков после запятой. Если требуется округление, необходимо передать RoundingMode.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal v = new BigDecimal("12.3456");
        System.out.println(v.setScale(2, RoundingMode.HALF_UP));
    }
}

Обычный режим округления до ближайшего значения

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

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_UP));
        System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_UP));
    }
}

Округление половинных значений к чётному

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

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_EVEN));
        System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_EVEN));
    }
}

CEILING и FLOOR

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

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal v = new BigDecimal("2.1");
        System.out.println(v.setScale(0, RoundingMode.CEILING));
        System.out.println(v.setScale(0, RoundingMode.FLOOR));
    }
}

DOWN и UP

DOWN отбрасывает дробную часть в сторону нуля, а UP всегда округляет от нуля. DOWN выполняет простое усечение.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal v = new BigDecimal("2.9");
        System.out.println(v.setScale(0, RoundingMode.DOWN));
        System.out.println(v.setScale(0, RoundingMode.UP));
    }
}

Округление во время деления

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

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal bill = new BigDecimal("100.00");
        BigDecimal people = new BigDecimal("3");
        System.out.println(bill.divide(people, 2, RoundingMode.HALF_UP));
    }
}

Удаление завершающих нулей

stripTrailingZeros удаляет лишние нули. Объедините его с toPlainString, чтобы в результате не использовалась экспоненциальная запись.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal v = new BigDecimal("12.300");
        System.out.println(v.stripTrailingZeros().toPlainString());
    }
}

Форматирование денег

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

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal amount = new BigDecimal("7");
        System.out.println(amount.setScale(2, RoundingMode.HALF_UP));
    }
}

Выбор режима

Выбирайте HALF_UP для обычного округления в пользовательском интерфейсе, а HALF_EVEN — для бухгалтерских расчётов, чтобы уменьшить накопленное смещение. Всегда явно указывайте режим, чтобы код не выдавал ошибку для незавершающихся результатов.

Быстрая проверка

Проверьте свои знания о scale и округлении.

Повторение

Вы научились управлять точностью:

  • Scale — это количество цифр после десятичного разделителя
  • setScale задаёт количество знаков после запятой и требует RoundingMode
  • HALF_UP — обычное округление, а HALF_EVEN — округление половинных значений к чётному
  • CEILING, FLOOR, UP и DOWN охватывают направленные режимы округления
  • Всегда указывайте режим при делении, чтобы избежать ошибок

Часто задаваемые вопросы

Урок «Округление и масштаб» бесплатный?

Да — полный текст урока «Округление и масштаб» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Округление и масштаб»?

Управляйте точностью и режимами округления Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Округление и масштаб»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Почему не стоит использовать double для денег
  2. Работа с BigDecimal
  3. Округление и масштаб
  4. BigInteger для огромных чисел
← Назад к Java Academy