Математический контекст необходим для сложения, вычитания и умножения?

во-первых, мои навыки поиска могут быть не такими хорошими, как я надеялся, поэтому, возможно, такой вопрос уже существует. Если да то скажите..

См. этот код ниже:

new BigDecimal("5").add(new BigDecimal("7"));

vs

new BigDecimal("5").add(new BigDecimal("7"), mathContext);

В каких ситуациях мне действительно нужен математический контекст (кроме делений)?

Я никогда не использую математический контекст, если не делю что-то. Насколько я знаю, это всегда работало, так что тут могут быть недостатки? Нужен ли мне математический контекст при сложении, вычитании и умножении? Я не очень хорошо разбираюсь в BigDecimal, я просто хочу использовать его, чтобы не потерять информацию, как при использовании двойников. Поскольку я иногда вижу код с математическим контекстом при добавлении чего-либо, я слишком боюсь просто удалить его только потому, что считаю его бесполезным...


Я прочитал этот вопрос, но не нашел правильного ответа на свой конкретный вопрос. .. Я начинаю с BigDecimals без математического контекста, а затем вычисляю с их помощью. Итак, мой вопрос: будут ли у меня когда-нибудь недостатки в отношении потери/точности информации и т. д.? Или это просто приведет к максимуму информации и все?

Редактировать: я не хочу округлять, никогда. В случаях деления вроде 1/3 мне, конечно, пришлось бы, но в случаях сложения, умножения и вычитания я не хочу никакого округления. Нужен ли мне математический контекст при любых обстоятельствах?


person BAERUS    schedule 28.05.2015    source источник


Ответы (2)


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

Если вы складываете, вычитаете или умножаете два числа с некоторыми десятичными частями и хотите округлить результат, вы также можете использовать mathcontext.

Если вам не нужно ничего округлять, значит, оно вам и не нужно.

Таким образом, это не ограничивается только тем, чтобы избежать проблем с бесконечным отдыхом от деления, например, 1/3

person Krzysztof Cichocki    schedule 28.05.2015
comment
Вы невнимательно читаете мой пост. - person Krzysztof Cichocki; 28.05.2015
comment
Снято с правкой :-) Не видел этого перед публикацией моего ответа. - person André Stannek; 28.05.2015
comment
Хорошо, спасибо за ответ. Значит, нет скрытых сценариев, в которых может возникнуть уродливое исключение из-за забывания математического контекста, такого как деление? - person BAERUS; 28.05.2015
comment
С простым добавлением, вычитанием и умножением таких сценариев нет :) - person Krzysztof Cichocki; 28.05.2015

Я мог бы представить себе случай, когда вы хотите, чтобы результат был округлен, а операнды - нет. Пример для дополнения.

1.23 + 3.01 = 4.24

Итак, возможно, вы хотите, чтобы ваш результат имел только десятичное место, поэтому вы должны использовать MathContext, чтобы сделать его

1.23 + 3.01 = 4.2

Я понятия не имею о реальном примере, но я думаю, что они существуют невообразимо.

person André Stannek    schedule 28.05.2015