Как округлить без Math# Round?

Так что легко округлить десятое место, выполнив что-то вроде:

int y;
double x = 2.5;

y = (int) (x+.5);

но как бы вы пошли о округлении до сотых или даже тысяч места без использования Math.round()?

1 ответ

Решение

Вы можете умножить исходное число на степень 10, чтобы желаемое место для округления оказалось на месте отряда, примените метод "сложения пополам и вокруг", который у вас уже есть, затем разделите ту же степень на 10, чтобы полученное число было Теперь вернемся к первоначальному масштабу.

Для сотых:

  1. декларировать y быть double, Это так что округление 2.125 к сотому месту приведет 2.13не 2,
  2. Умножьте x значение по 100.0,
  3. добавлять 0.5,
  4. Приведение к int, (Или же long для большей точности.)
  5. Поделить на 100.0,

Пример: округление 2.125 к сотому месту. 1. 2,125 * 100,0 212.5, 2. 212,5 + 0,5 213.0, 3. 213.0 приведение к int является 213, 4. 213 деленное на 100.0 является 2.13,

Для тысячных процедура такая же, только 100.0 заменяется 1000.0,

Вышеуказанный метод подвержен ошибкам с плавающей точкой из-за конечной точности double тип с плавающей точкой.

Вы также можете конвертировать свою ценность в BigDecimal, Тогда вы можете использовать BigDecimal "s round метод. ТребуетсяMathContext это позволяет вам напрямую округлять до желаемой точности.

Public class Decimal {

public static void main(String[] args) {

    double xd = 2.125;
    double mult = xd * 100.0;
    double add = mult + 0.5;
    int reuslts = (int) add;

    double result = reuslts / 100.0;

    System.out.println(result);// 2.13
}

}

Другие вопросы по тегам