Подтвердить что ты не робот

Как округлить целое число в java

Я хочу округлить число 1732 до ближайших десяти, сто и тысяч. Я пытался использовать функции Math round, но был написан только для float и double. Как это сделать для Integer? Есть ли какая-либо функция в java?

4b9b3361

Ответ 1

Используйте Точность (Apache Commons Math 3.1.1)

Precision.round(double, scale); // return double
Precision.round(float, scale); // return float

Используйте MathUtils (Apache Commons Math) - Старые версии

MathUtils.round(double, scale); // return double
MathUtils.round(float, scale); // return float

шкала. Число цифр справа от десятичной точки. (+/-)


Отброшено, потому что метод round (float, масштаб).

Math.round(MathUtils.round(1732, -1));//ближайшая десятка, 1730
Math.round(MathUtils.round(1732, -2));//ближайшая сотня, 1700
Math.round(MathUtils.round(1732, -3));//ближайшая тысяча, 2000


Лучшее решение
int i = 1732;
MathUtils.round((double) i, -1); // nearest ten, 1730.0
MathUtils.round((double) i, -2); // nearest hundred, 1700.0
MathUtils.round((double) i, -3); // nearest thousand, 2000.0

Ответ 2

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

int roundedNumber = (number + 500) / 1000 * 1000;

Это приведет к чему-то вроде от 1499 до 1000 и от 1500 до 2000.

Если у вас могут быть отрицательные числа:

int offset = (number >= 0) ? 500 : -500;
int roundedNumber = (number + offset) / 1000 * 1000;

Ответ 3

(int)(Math.round( 1732 / 10.0) * 10)

Math.round(double) принимает double, а затем округляется как ближайшее целое число. Таким образом, 1732 станет 173.2 (входной параметр) при обработке Math.round(1732 / 10.0). Таким образом, метод округляет его, как 173.0. Затем, умножая его на 10 (Math.round( 1732 / 10.0) * 10), выдается закругленный ответ, который 173.0 затем будет передан в int.

Ответ 4

Вы можете попробовать:

int y = 1732;
int x = y - y % 10;

Результат будет 1730.

Изменить. Это не отвечает на вопрос. Он просто удаляет часть номера, но не "округляется до ближайшего".

Ответ 5

В ближайшие десять:

int i = 1986;
int result;

result = i%10 > 5 ? ((i/10)*10)+10 : (i/10)*10;

(добавьте ноль по желанию сотню тысяч).

Ответ 6

почему бы просто не проверить цифру устройства... 1. если оно меньше или равно 5, добавьте 0 в единицу позиции и оставьте номер как есть. 2. если оно больше 5, увеличьте десятки цифр, добавьте 0 в единицу позиции.

ex: 1736 (так как 6 >= 5) округленное число будет 1740.   теперь для 1432 (с 2 и 5) округленное число будет 1430....

Я надеюсь, что это сработает... если не так, чем сообщите мне об этих случаях...

Счастливое программирование,

Ответ 7

очень просто. попробуйте это

int y = 173256457;int x = (y/10)*10; 

Теперь вы можете заменить 10 на 100,1000 и т.д....

Ответ 8

Это очень просто..

int x = 1234; int y = x - x% 10;//Это даст 1230

int y = x - x% 100;//Это даст 1200

int y = x - x% 1000;//Это даст 1000

Вышеупомянутая логика просто преобразует последние цифры в 0. Если вы хотите, чтобы фактический раунд // Напр. 1278 это должно округлить до 1280, потому что последняя цифра 8 > 5 для этого я написал функцию проверки.

 private double returnAfterRoundDigitNum(double paramNumber, int noOfDigit)  
    {  
     double tempSubtractNum = paramNumber%(10*noOfDigit);  
     double tempResultNum = (paramNumber - tempSubtractNum);  
     if(tempSubtractNum >= (5*noOfDigit))  
      {  
          tempResultNum = tempResultNum + (10*noOfDigit);  
      }  
      return tempResultNum;  
   }  

Здесь проходят 2 параметра: одно - это число, а другое - позиция, до которой вы должны округлить.

С уважением, Abhinav

Ответ 9

Вы посмотрели на реализацию Mathutils.round()? Все это основано на преобразованиях BigDecimal и string. Трудно представить себе несколько подходов, которые менее эффективны.

Ответ 10

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

double roundValue (double input, double toNearest){
//toNearest is any rounding base like 10, 100 or 1000.
    double modValue = input % toNearest;
    System.out.println(modValue);
    if(modValue == 0d){
        roundedValue = input;
    }
    else
    {
        roundedValue = ((input - modValue) + toNearest);
    }
    System.out.println(roundedValue);
    return roundedValue;
}

Ответ 11

Я сделал этот простой метод, и он отлично работает для меня. Он округляется до ближайших десяти, но с небольшой корректировкой вы можете округлить 100, 1000 и т.д.

public int round10(int num){
    if (num%10 < 5){
        while (num%10!=0){
            num--;
        }
    }
    else {
        while (num%10!=0){
            num++;
        }
    }
    return num;
} 

Ответ 12

Обычно я делаю так:

int num = 1732;
int roundedNum = Math.round((num + 9)/10 * 10);

В результате вы получите 1740.

Надеюсь, это поможет.