Вам действительно стоит более подробно описать «не работает». Что случается? Что не бывает? Чего ты ожидал? Какие ошибки у вас были? У вас есть round()метод в том же классе? А ты import static java.lang.Math.*? И т. Д. Есть много способов округлить числа и, следовательно, много возможных ответов. Другими словами, ваш вопрос расплывчатый и неоднозначный, и на него нельзя дать разумного ответа в его нынешней форме. Стрельба в темноте.
BalusC
1
Означает ли «не работает» не округление до ближайшего целого числа, выдача исключения или не округление вверх / вниз? Этот вопрос бесполезен без перекрестной ссылки на контекст с ответом.
modulitos
Ответы:
239
Какой тип возврата round()метода во фрагменте?
Если это Math.round()метод, он возвращает Long, когда входным параметром является Double.
Итак, вам нужно будет указать возвращаемое значение:
Рассмотрите возможность использования Math.toIntExact (long) вместо простого преобразования в int; double может содержать довольно широкий диапазон значений, и вы, вероятно, не захотите молча выбрасывать наиболее значимые биты, если ваш double больше, чем вы ожидаете.
othp 01
Я считаю, что гипс не нужен. Я не знаю, было ли это в прошлом, но round действительно возвращает int.
выпадение
@Dropout Math.round возвращает int, если вы даете ему float, и long, если вы даете ему double.
Tur1ng
27
Если вам не нравится Math.round (), вы также можете использовать этот простой подход:
Это решение короче, не требует импорта и переносимо на многие другие языки программирования с минимальными изменениями. И это может быть даже быстрее, в зависимости от вашей платформы: stackoverflow.com/questions/12091014/…
Д-р Дэниел Томмес,
1
Я не критикую ваш ответ, который считаю очень полезным по той причине, которую вы упомянули. Этим комментарием я обращался к людям, которые боялись бы использовать Math.round(), что делает «буквально» то же самое, что и решение, которое вы предлагаете, вот и все. Приветствия.
Готье Боальо,
2
Да, как сказал nehz, я считаю, что это округлит от -2,1 до -1, например.
Бен Ааронсон
5
@AlbertoHormazabal, вы не заметили, что он добавил 0.5?
Саша
11
Округление двойного до «ближайшего» целого числа следующим образом:
1,4 -> 1
1,6 -> 2
-2,1 -> -2
-1,3 -> -1
-1,5 -> -2
privateint 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
Встреча
3
import java.math.*;publicclassTestRound11{publicstaticvoid main(String args[]){double d =3.1537;BigDecimal bd =newBigDecimal(d);
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);// output is 3.15System.out.println(d +" : "+ round(d,2));// output is 3.154System.out.println(d +" : "+ round(d,3));}publicstaticdouble 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 =newBigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);return bd.doubleValue();}}
Функция Math.round перегружена. Когда она получает значение с плавающей запятой, она выдаст вам int. Например, это сработает.
int a=Math.round(1.7f);
Когда он получает значение типа double, он дает вам long, поэтому вам нужно привести его к типу int.
int a=(int)Math.round(1.7);
Это сделано для предотвращения потери точности. Ваше двойное значение - 64-битное, но тогда ваша переменная int может хранить только 32-битную, поэтому она просто преобразует ее в long, которая является 64-битной, но вы можете привести ее к 32-битной, как описано выше.
Есть 2 метода Math.round. Тот, который принимает число с плавающей запятой, возвращает целое число, это правильно. Но тот, что берет дубль, возвращает долгое время.
Вам действительно нужно опубликовать более полный пример, чтобы мы могли видеть, что вы пытаетесь сделать. Из того, что вы опубликовали, я вижу вот что. Во-первых, нет встроенного round()метода. Вам нужно либо вызвать Math.round(n), либо статически импортировать Math.round, а затем вызвать его, как и у вас.
round()
метод в том же классе? А тыimport static java.lang.Math.*
? И т. Д. Есть много способов округлить числа и, следовательно, много возможных ответов. Другими словами, ваш вопрос расплывчатый и неоднозначный, и на него нельзя дать разумного ответа в его нынешней форме. Стрельба в темноте.Ответы:
Какой тип возврата
round()
метода во фрагменте?Если это
Math.round()
метод, он возвращает Long, когда входным параметром является Double.Итак, вам нужно будет указать возвращаемое значение:
источник
Если вам не нравится Math.round (), вы также можете использовать этот простой подход:
источник
Math.round()
Math.round()
, что делает «буквально» то же самое, что и решение, которое вы предлагаете, вот и все. Приветствия.0.5
?Округление двойного до «ближайшего» целого числа следующим образом:
1,4 -> 1
1,6 -> 2
-2,1 -> -2
-1,3 -> -1
-1,5 -> -2
Вы можете изменить условие (результат <0,5) по своему усмотрению.
источник
источник
Функция Math.round перегружена. Когда она получает значение с плавающей запятой, она выдаст вам int. Например, это сработает.
Когда он получает значение типа double, он дает вам long, поэтому вам нужно привести его к типу int.
Это сделано для предотвращения потери точности. Ваше двойное значение - 64-битное, но тогда ваша переменная int может хранить только 32-битную, поэтому она просто преобразует ее в long, которая является 64-битной, но вы можете привести ее к 32-битной, как описано выше.
источник
В документации
Math.round
говорится:Нет необходимости переводить в
int
. Может быть, это было изменено по сравнению с прошлым.источник
источник
Вам действительно нужно опубликовать более полный пример, чтобы мы могли видеть, что вы пытаетесь сделать. Из того, что вы опубликовали, я вижу вот что. Во-первых, нет встроенного
round()
метода. Вам нужно либо вызватьMath.round(n)
, либо статически импортироватьMath.round
, а затем вызвать его, как и у вас.источник