Как я мог бы округлить до двойника до int и никогда не округлять его. Я знаю Math.round(double)
, но я хочу, чтобы он всегда округлялся. Итак, если это было 3.2
, оно округляется до 4.Всегда раунд UP a Double
Возможно ли это?
Как я мог бы округлить до двойника до int и никогда не округлять его. Я знаю Math.round(double)
, но я хочу, чтобы он всегда округлялся. Итак, если это было 3.2
, оно округляется до 4.Всегда раунд UP a Double
Возможно ли это?
Вы можете использовать метод Math.ceil()
.
См JavaDoc ссылка: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#ceil-double-
Из документов:
CEIL
public static double ceil(double a)
Возвращает наименьшее (ближайшее к отрицательной бесконечности) двойное значение, которое больше или равно аргумент и равен математическому целому. Особые случаи:
Обратите внимание, что значение Math.ceil (x) - это точно значение -Math.floor (-x).
Параметры:
Возвращает:
Самый маленький (ближе всего к отрицательной бесконечности) значение с плавающей точкой, которое больше или равно аргумента и равно математическому целому числу.
Если вы можете процитировать по ссылке, это поможет людям найти весь ответ на Stack Overflow. –
@ ZacharyVance done – rpax
_ceil_ возвращает _double_, он попросил _int_ –
Math.ceil()
даст вам самое близкое самое низкое значение, если вы хотите быть округлены до ближайших больших значений следует использовать Math.floor()
Это снова к фронту. – EJP
Math.ceil
общественности статической двойной CEIL (двойной а)
Возвращает наименьший (ближайший к отрицательной бесконечности) double value , который больше или равен аргументу и равен математическому целому числу. Особые случаи:
private int roundUP(double d){
double dAbs = Math.abs(d);
int i = (int) dAbs;
double result = dAbs - (double) i;
if(result==0.0){
return (int) d;
}else{
return (int) d<0 ? -(i+1) : i+1;
}
}
Хорошая работа!;)
В простых словах
Math.ceil
будет всегда округлить или, как было сказано выше, в избытка.Math.round
будет округлять вверх или вниз в зависимости от десятичных знаков.
Примеры Math.ceil
и Math.round
:
Код Ниже будет возвращать:
Стоимость без CEIL 2.2 и с Ceil 3 (int), 3,0 (двойной). Если мы вокруг него: 2
int m2 = 2200;
double rate = 1000.0;
int costceil = (int)Math.ceil(m2/rate);
double costdouble = m2/rate;
double costdoubleceil = Math.ceil(m2/rate);
int costrounded = (int)Math.round(m2/rate);
System.out.println("Cost, without Ceil "+costdouble+" and with Ceil "+
costceil+"(int), "+costdoubleceil+"(double). If we round it: "+costrounded);
Если изменить значение м2 до, например , результат был бы: Стоимость без CEIL 2.499 и CEIL 3 (INT), 3,0 (двойной) , Если мы округлим его: 2
Если мы изменим значение m2 на, например, , результатом будет:
Стоимость без Ceil 2.55 и с Ceil 3 (int), 3.0 (double). Если мы округлим его: 3
Надеюсь, это поможет. (Информация, извлеченная из предыдущих ответов, я просто хотел сделать ее более понятной).
Мой метод относительно прост, надеюсь, что он сработает для вас.
В моем случае у меня есть ряд объектов, которые могут содержать только 3 элемента, и я должен отрегулировать количество строк, которые я должен разместить для элементов.
У меня есть несколько Double NumberOfRows, затем я использую numberOfRows.intValue(), чтобы получить значение int для numberOfRows.
Если значение int, которое я получаю, меньше, чем numberOfRows, я добавляю 1 к numberOfRows, чтобы округлить его, иначе значение, которое я получаю от numberOfRows.intValue(), является ответом, который я хочу.
Я написал это просто для цикла, чтобы проверить это:
for(int numberOfItems = 0; numberOfItems < 16; numberOfItems++) {
Double numberOfRows = numberOfItems/3.0;
System.out.println("Number of rows are: " + numberOfRows);
System.out.println("Number of items are: " + numberOfItems);
if(numberOfRows.intValue() < numberOfRows) {
System.out.println("int number of rows are: " + (numberOfRows.intValue() + 1));
}
else {
System.out.println("int value of rows are: " + numberOfRows.intValue());
}
System.out.println();
System.out.println();
}
Краткий пример без использования Math.ceil().
public double roundUp(double d){
return d > (int)d ? (int)d + 1 : d;
}
Exaplanation: Сравнить операнд округляется вниз операнд, используя приведение типа, если больше возврата округляется вниз аргумент + 1 (означает округление вверх) еще без изменений операнда.
Пример в псевдокоде
double x = 3.01
int roundDown = (int)x // roundDown = 3
if(x > roundDown) // 3.01 > 3
return roundDown + 1 // return 3.0 + 1.0 = 4.0
else
return x // x equals roundDown
В любом случае вы должны использовать Math.ceil()
. Это всего лишь простой пример того, как вы могли бы сделать это самостоятельно.
BigDecimal("3.2").setScale(0 , RoundingMode.CEILING)
BigDecimal
Если вы хотите accuracy rather than performance, избежать floating point технологии. Это означает, что необходимо избегать float
, Float
, double
, Double
. Для точности используйте класс BigDecimal
.
На BigDecimal
, set the scale, количество цифр справа от знака после запятой. Если вы не хотите десятичной дроби, установите масштаб на ноль. И укажите rounding mode. Чтобы всегда округлить фракцию вверх, используйте RoundingMode.CEILING
, задокументированный как:
Округление режима округления к положительной бесконечности. Если результат положительный, он ведет себя как для RoundingMode.UP; если отрицательный, ведет себя как RoundingMode.DOWN. Обратите внимание, что этот режим округления никогда не уменьшает вычисленное значение. Так, например, 1,1 становится равным 2, и ваш 3,2 становится 4.
BigDecimal bd = new BigDecimal("3.2") ;
BigDecimal bdRounded = bd.setScale(0 , RoundingMode.CEILING) ;
String output = bdRounded.toString() ;
System.out.println("bdRounded.toString(): " + bdRounded) ; // 4
Смотрите эту code run live at IdeOne.com.
'Math.ceil' - если у вас есть такая проблема в будущем, вы можете прочитать сгенерированный JavaDoc соответствующей библиотеки. В этом случае Math –
Даже если вам не нравится RTFM, работает 'Math.round (yourNum + 0.5)'. – nhgrif
@nhgrif Не совсем как '0.0' будет округлено до' 1', это то же самое, что округление и добавление 1. –