Установление общего правила деления

У меня есть следующая функция:

public static void main(String[] args) {
        int interval = 23950; 

        System.out.println (Math.round(weekInterval/1000.00)*1000);



    }

Все, что делает функция - это округляет число (интервал) до ближайшего кратного ста или тысячи и т. Д.

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

чтобы

Math.round(weekInterval/placeholder)*placeholder)

Есть идеи?

Редактировать:

Пока это то, что я придумал, используя свои ограниченные знания - потерпите меня, это может быть неэффективно:

public static void main(String[] args) {
        int weekInterval = 2500; 
        StringBuilder sbr = new StringBuilder(); 
        int len = String.valueOf(weekInterval).length();
        String num = "1"; 
        for(int i = 2; i<=len; i++){

            sbr.append("0"); 
        }
        System.out.println("Number is "+sbr.toString()); 
        System.out.println("Number is "+num+sbr.toString()); 

        int placeholder = Integer.valueOf(num+sbr.toString());
        System.out.println((weekInterval + placeholder/2)/placeholder*placeholder); 


    }

2 ответа

С http://mindprod.com/jgloss/round.html:

// rounding m up to next highest multiple of n
int ceil = ( m + n - 1 ) / n * n;

// rounding m down to multiple of n
int floor = m / n * n;

// rounding m to nearest multiple of n
int near = ( m + n/2 ) / n * n;

Здесь m - число для округления, а n будет вашим "заполнителем".

Гораздо более простое решение с использованием BigDecimal:

       BigDecimal interval = new BigDecimal("8953315756233454365754734");
       System.out.printf("%.0f\n",interval.round(new MathContext(1, RoundingMode.HALF_UP)));
Другие вопросы по тегам