Как округлить без Math# Round?
Так что легко округлить десятое место, выполнив что-то вроде:
int y;
double x = 2.5;
y = (int) (x+.5);
но как бы вы пошли о округлении до сотых или даже тысяч места без использования Math.round()
?
1 ответ
Вы можете умножить исходное число на степень 10, чтобы желаемое место для округления оказалось на месте отряда, примените метод "сложения пополам и вокруг", который у вас уже есть, затем разделите ту же степень на 10, чтобы полученное число было Теперь вернемся к первоначальному масштабу.
Для сотых:
- декларировать
y
бытьdouble
, Это так что округление2.125
к сотому месту приведет2.13
не2
, - Умножьте
x
значение по100.0
, - добавлять
0.5
, - Приведение к
int
, (Или жеlong
для большей точности.) - Поделить на
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
}
}