Я пришел сюда, просто желая простого ответа о том, как округлить число. Это дополнительный ответ, чтобы обеспечить это.
Наиболее распространенным случаем является использование Math.round()
.
Math.round(3.7) // 4
Числа округлены до ближайшего целого числа. Значение .5
округляется. Если вам нужно другое поведение округления, вы можете использовать одну из других функций Math . См. Сравнение ниже.
Как указано выше, это округляет до ближайшего целого числа. .5
округлые десятичные числа. Этот метод возвращает int
.
Math.round(3.0); // 3
Math.round(3.1); // 3
Math.round(3.5); // 4
Math.round(3.9); // 4
Math.round(-3.0); // -3
Math.round(-3.1); // -3
Math.round(-3.5); // -3 *** careful here ***
Math.round(-3.9); // -4
Любое десятичное значение округляется до следующего целого числа. Он подходит к потолку. Этот метод возвращает значение double
.
Math.ceil(3.0); // 3.0
Math.ceil(3.1); // 4.0
Math.ceil(3.5); // 4.0
Math.ceil(3.9); // 4.0
Math.ceil(-3.0); // -3.0
Math.ceil(-3.1); // -3.0
Math.ceil(-3.5); // -3.0
Math.ceil(-3.9); // -3.0
Любое десятичное значение округляется до следующего целого. Этот метод возвращает значение double
.
Math.floor(3.0); // 3.0
Math.floor(3.1); // 3.0
Math.floor(3.5); // 3.0
Math.floor(3.9); // 3.0
Math.floor(-3.0); // -3.0
Math.floor(-3.1); // -4.0
Math.floor(-3.5); // -4.0
Math.floor(-3.9); // -4.0
Это похоже на раунд в том, что десятичные значения округляются до ближайшего целого. Однако, в отличие от round
, .5
значения округляются до четного целого. Этот метод возвращает значение double
.
Math.rint(3.0); // 3.0
Math.rint(3.1); // 3.0
Math.rint(3.5); // 4.0 ***
Math.rint(3.9); // 4.0
Math.rint(4.5); // 4.0 ***
Math.rint(5.5); // 6.0 ***
Math.rint(-3.0); // -3.0
Math.rint(-3.1); // -3.0
Math.rint(-3.5); // -4.0 ***
Math.rint(-3.9); // -4.0
Math.rint(-4.5); // -4.0 ***
Math.rint(-5.5); // -6.0 ***
Недавно у меня был случай, который показал реальную проблему, с которой вы можете столкнуться, когда используете эти классы: у нас был код, который бы не компилировался, потому что метод, который он использовал на солнце. * класс просто не существовал в OpenJDK on Ubuntu. Поэтому я предполагаю, что при использовании этих классов вы больше не можете говорить такие вещи, как «это работает с Java 5», потому что он будет работать только на определенной реализации Java.
def import_iter():
""" Used to return output as it is generated """
# First return the template
t = loader.get_template('main/qimport.htm')
c = Context()
yield t.render(c)
# Now process the files
if req.method == 'POST':
location = req.POST['location']
if location:
for finfo in import_location(location):
yield finfo+"<br/>"
return HttpResponse(import_iter())
являются экспериментальными (например, оригинальный API APT). Во IIRC у Алекса Бакли есть блог о различных статусах этих API. Но да, в целом они могут изменяться или исчезать в обновлениях и между поставщиками.
– Tom Hawtin - tackline
2 December 2009 в 21:22
Да, потому что никто не гарантирует, что эти классы или API будут одинаковыми со следующей версией Java, и я уверен, что не гарантировано, что эти классы доступны в версиях Java от других поставщиков.
Итак, вы связываете свой код с специальной версией Java и теряете хотя бы переносимость.
Документация JDK 6 содержит ссылку под названием . Примечание. sun.*
Пакеты . Это документ из документов Java 1.2, поэтому ссылки на sun.*
должны обрабатываться так, как если бы они сказали com.sun.*
. Наиболее важными из них являются:
Классы, которые Sun включает в себя с Java 2 SDK, Standard Edition, попадают в группы пакетов
java.*
,javax.*
,org.*
иsun.*
. Все, кроме пакетовsun.*
, являются стандартной частью платформы Java и будут поддерживаться в будущем. В общем, такие пакеты, какsun.*
, которые находятся за пределами платформы Java, могут быть разными на платформах ОС (Solaris, Windows, Linux, Macintosh и т. Д.) И могут быть изменены в любое время без уведомления с версиями SDK (1.2, 1.2.1, 1.2.3 и т. Д.). Программы, содержащие прямые вызовы пакетовsun.*
, не являются 100% чистой Java.и
Каждая компания, которая реализует платформу Java, сделает это по-своему. Классы из
sun.*
присутствуют в SDK для поддержки реализации Sun платформы Java: классыsun.*
- это то, что заставляет классы платформы Java работать «под обложками» для Sun Java 2 SDK. Эти классы вообще не будут присутствовать на платформе Java другого поставщика. Если ваша Java-программа запрашивает класс «sun.package.Foo» по имени, она может завершиться неудачно с ClassNotFoundError, и вы потеряете главное преимущество разработки на Java.
com.sun.*
не изменится на com.oracle.*
, поскольку Sun больше не существует.
– Powerlord
15 October 2014 в 19:33
com.sun.*
являются частью документальной спецификации. Без них невозможно было бы написать JNDI LDAP или код COSNaming. Проблема заключается в пакетах sun.*
, которые представляют собой совсем другое дело и специально документированы как таковые.
– user207421
1 May 2016 в 05:24
sun.*
и com.sun.*
неэффективно скажется на Java 9.
– Powerlord
3 October 2017 в 13:45
com.sun.*
. Они являются документированными частями Sun / Oracle JDK.
– user207421
14 June 2018 в 08:30
Собственные Java-классы Sun являются частью их реализации Java, не являющейся частью Java API, их использование недокументировано и неподдерживается. Поскольку они являются внутренними, они могут быть изменены в любой момент по любой причине, которую решает команда, работающая с Sun JVM.
Также реализация Java Sun не является единственной! Ваш код не сможет переноситься в JVM от других поставщиков, таких как Oracle / BEA и IBM.
Попробуйте запустить код с помощью JVM, отличного от Sun, и посмотрите, что произойдет ...
(ваш код не будет работать с исключением ClassNotFound)
com.sun.*
являются экспериментальными (например, исходный APT API). IIRC, Алекс Бакли имеет блог о различных статусах этих API. Но да, в общем, они могут меняться или исчезать в выпусках обновлений и между поставщиками. – Tom Hawtin - tackline 2 December 2009 в 21:22