Вопрос

Согласно Википедии округляя отрицательное число, вы округляете абсолютное число. Таким образом, по этой причине -3,5 будет округлено до -4. Но когда я использую java.lang.Math.round (-3.5) возвращает -3. Может кто-нибудь объяснить это?

Другие советы

Существует множество способов округления; тот, на который вы смотрите, называется симметричным арифметическим округлением (как говорится). Раздел, на который вы ссылаетесь: «Этот метод обычно используется в математических приложениях, например, в бухгалтерском учете. Это тот, который обычно преподается на уроках математики начальных классов. & Quot; Похоже, это признает, что это не правило, согласованное на глобальном уровне, а то, которое является наиболее распространенным.

Лично я не помню, чтобы когда-либо учили этому правилу в школе. Мое понимание округления всегда заключалось в том, что .5 округляется, независимо от знака числа. Видимо, авторы Java имеют такое же понимание. Это асимметричное арифметическое округление.

Различные инструменты и языки потенциально используют разные схемы округления. Excel, очевидно, использует симметричный метод.

(В целом, я бы посоветовал, если вы обнаружите конфликт между Википедией и опытом, вы ищете информацию в другом месте. Википедия не идеальна.)

Для чего стоит, java.math.BigDecimal имеет выбираемые режимы округления, если вам нужен больший контроль над такими вещами.

В статье Википедии, на которую вы ссылаетесь, не говорится, что это единственный способ округления, а просто обычный способ округления. В этой статье также упоминается несколько альтернатив (к сожалению, ни одна из них не описывает метод округления в Java - хотя они и называют его «асимметричным арифметическим округлением» при указании того, что делает JavaScript).

Вам нужно решить, как хотите округлить числа, а затем использовать этот метод. Если реализация Java соответствует этому, то отлично. в противном случае вам нужно будет реализовать это самостоятельно.

По словам Javadocs:

Возвращает ближайший long к аргументу. Результат округляется до целого числа путем добавления 1/2, взятия минимального значения результата и приведения результата к типу long . Другими словами, результат равен значению выражения:      

(long)Math.floor(a + 0.5d)

Оказывается, соглашение сводится к округлению. Я думаю, что Википедия ошибочна. Оказывается, Microsoft ошиблась, хотя и округлила до -4, что не является соглашением (я проверил с кем-то, кто имеет докторскую степень по математике).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top