Установление общего правила деления
У меня есть следующая функция:
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)));