Сейчас я пытаюсь это сделать:
int a = round(n);
где n
является double
, но он не работает. Что я делаю не так?
Сейчас я пытаюсь это сделать:
int a = round(n);
где n
является double
, но он не работает. Что я делаю не так?
Каков тип возврата метода round()
в фрагменте?
Если это метод Math.round()
, он возвращает Long, когда параметр ввода равен Double.
Итак, вам нужно будет указать возвращаемое значение:
int a = (int) Math.round(doubleVar);
Если вам не нравится Math.round(), вы также можете использовать этот простой подход:
int a = (int) (doubleVar + 0.5);
Округление double в "ближайшее" целое число, как это:
1.4 → 1
1.6 → 2
-2.1 → -2
-1.3 → -1
-1.5 → -2
private int round(double d){
double dAbs = Math.abs(d);
int i = (int) dAbs;
double result = dAbs - (double) i;
if(result<0.5){
return d<0 ? -i : i;
}else{
return d<0 ? -(i+1) : i+1;
}
}
Вы можете изменить условие (результат < 0,5), как вы предпочитаете.
import java.math.*;
public class TestRound11 {
public static void main(String args[]){
double d = 3.1537;
BigDecimal bd = new BigDecimal(d);
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
// output is 3.15
System.out.println(d + " : " + round(d, 2));
// output is 3.154
System.out.println(d + " : " + round(d, 3));
}
public static double round(double d, int decimalPlace){
// see the Javadoc about why we use a String in the constructor
// http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)
BigDecimal bd = new BigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}
}
Документация Math.round
гласит:
Возвращает результат округления аргумента до целого. Результат эквивалентно
(int) Math.floor(f+0.5)
.
Не нужно бросать на int
. Возможно, это было изменено с прошлого.
public static int round(double d) {
if (d > 0) {
return (int) (d + 0.5);
} else {
return (int) (d - 0.5);
}
}
Вам действительно нужно опубликовать более полный пример, чтобы мы могли видеть, что вы пытаетесь сделать. Из того, что вы опубликовали, вот что я вижу. Во-первых, нет встроенного метода round()
. Вам нужно либо вызвать Math.round(n)
, либо статически импортировать Math.round
, а затем вызвать его так, как вы.