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

Округление двойника, чтобы превратить его в int (java)

Сейчас я пытаюсь это сделать:

int a = round(n);

где n является double, но он не работает. Что я делаю не так?

4b9b3361

Ответ 1

Каков тип возврата метода round() в фрагменте?

Если это метод Math.round(), он возвращает Long, когда параметр ввода равен Double.

Итак, вам нужно будет указать возвращаемое значение:

int a = (int) Math.round(doubleVar);

Ответ 2

Если вам не нравится Math.round(), вы также можете использовать этот простой подход:

int a = (int) (doubleVar + 0.5);

Ответ 3

Округление 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), как вы предпочитаете.

Ответ 4

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();
  }
}

Ответ 5

Документация Math.round гласит:

Возвращает результат округления аргумента до целого. Результат эквивалентно (int) Math.floor(f+0.5).

Не нужно бросать на int. Возможно, это было изменено с прошлого.

Ответ 6

public static int round(double d) {
    if (d > 0) {
        return (int) (d + 0.5);
    } else {
        return (int) (d - 0.5);
    }
}

Ответ 7

Вам действительно нужно опубликовать более полный пример, чтобы мы могли видеть, что вы пытаетесь сделать. Из того, что вы опубликовали, вот что я вижу. Во-первых, нет встроенного метода round(). Вам нужно либо вызвать Math.round(n), либо статически импортировать Math.round, а затем вызвать его так, как вы.