Сейчас я пытаюсь это:Завершают двойной, чтобы превратить его в междунар (Java)
int a = round(n);
где n
является double
, но это не работает. Что я делаю не так?
Сейчас я пытаюсь это:Завершают двойной, чтобы превратить его в междунар (Java)
int a = round(n);
где n
является double
, но это не работает. Что я делаю не так?
Каков обратный тип метода round()
во фрагменте?
Если это метод Math.round()
, он возвращает длинный, когда входной параметр равен Double.
Таким образом, вам придется бросить возвращаемое значение:
int a = (int) Math.round(doubleVar);
Рассмотрите возможность использования Math.toIntExact (long) вместо того, чтобы просто отличать int; двойной может содержать целый ряд значений, и вы, вероятно, не захотите, чтобы вы выбрали наиболее значимые биты, если ваш двойной размер больше, чем вы ожидаете. – othp
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();
}
}
Вам действительно нужно опубликовать более полный пример, чтобы мы могли видеть, что вы пытаетесь сделать. Из того, что вы опубликовали, вот что я вижу. Во-первых, нет встроенного метода round()
. Вам нужно либо позвонить Math.round(n)
, либо статически импортировать Math.round
, а затем называть его так, как вы.
В java нет глобальных функций для начала. – Danon
ROUNDING двойной к "ближайшей" целое как это:
1,4 ->
1.6 ->
-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) как пожелаете.
Я согласен с ответом авиваля. Но если вам нужно просто округлить до наивысшего целого числа, вы можете посмотреть ниже: double decimalNumber = 4.56777; System.out.println (новый Float (Math.round (decimalNumber))); Выход: 5 – Smeet
Если вам не нравится Math.round(), вы можете использовать этот простой подход, а также:
int a = (int) (doubleVar + 0.5);
Очевидно, нет никакой веской причины не любить 'Math.round()': http://stackoverflow.com/a/6468757/1715716 –
Это решение короче, не требует импорта и переносится для многих других языков программирования с минимальными изменениями. И это может быть даже быстрее в зависимости от вашей платформы: https://stackoverflow.com/questions/12091014/what-is-the-most-efficient-way-to-round-a-float-value-to-the-the -nearest-integer-in/12091343 # 12091343 –
Я не критикую ваш ответ, который я нахожу ** очень полезным ** по той причине, о которой вы говорите. Я, по этому комментарию, обратился к людям, которые боялись бы использовать 'Math.round()', что буквально «совпадает с решением, которое вы предоставляете, вот и все. Приветствия. –
Документация Math.round
говорит:
Возвращает результат округления аргумента a целое число. Результат эквивалентен
(int) Math.floor(f+0.5)
.
Не нужно бросать в int
. Возможно, это было изменено с прошлого.
Существует 2 метода Math.round. Тот, который принимает float, возвращает целое число, это правильно. Но тот, который берет двойной, возвращает долго. –
public static int round(double d) {
if (d > 0) {
return (int) (d + 0.5);
} else {
return (int) (d - 0.5);
}
}
Функция Math.round перегружен Когда он получает значение с плавающей точкой, это даст вам Int. Например, это сработает.
int a=Math.round(1.7f);
Когда он получает двойное значение, он даст вам длинный, поэтому вы должны привести его к int.
int a=(int)Math.round(1.7);
Это делается для предотвращения потери точности. Ваше двойное значение - 64 бит, но тогда ваша переменная int может хранить только 32 бит, поэтому она просто преобразует ее в длинную, которая равна 64 бит, но вы можете привести ее к 32 бит, как объяснялось выше.
Возможный дубликат http://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java –
Вы должны действительно разработать «нерабочий» в более подробно. Что происходит? Что не происходит? Чего ты ожидал? Какие у вас ошибки? У вас есть метод round() 'в том же классе? Вы импортировали статический файл java.lang.Math. *?? И т. Д. Существует множество способов округления чисел и, следовательно, множество возможных ответов. Другими словами, ваш вопрос является неопределенным и двусмысленным и не может быть разумным ответом в его нынешней форме. Это стреляет в темноте. – BalusC
«Не работает» означает не округление до ближайшего int, а исключение или исключение округления вверх или вниз? Этот вопрос бесполезен, не перекрестно ссылаясь на контекст с ответом. – modulitos