|
|
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
BigDecimal x = new BigDecimal("45.457"); System.out.println(x.toBigInteger()); -- вывидет 46 а как бы мне произвести округление не до целого, а до порядка сотен, т.е. что мне надо сделать, чтобы получить 45.46? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 09:40:05 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
vladik_kBigDecimal x = new BigDecimal("45.457"); System.out.println(x.toBigInteger()); -- вывидет 46 а как бы мне произвести округление не до целого, а до порядка сотен, т.е. что мне надо сделать, чтобы получить 45.46? round(45.457*100)/100.00 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 10:46:14 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Округлит до 45.46 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 10:49:13 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov vladik_kBigDecimal x = new BigDecimal("45.457"); System.out.println(x.toBigInteger()); -- вывидет 46 а как бы мне произвести округление не до целого, а до порядка сотен, т.е. что мне надо сделать, чтобы получить 45.46? round(45.457*100)/100.00 А вот этого стоит опасаться! Почитайте тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 10:50:41 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Ruslan.Isbarov Vladimir Kozlov round(45.457*100)/100.00 А вот этого стоит опасаться! Почитайте тут Почитал. Согласен с тем что в финансовых расчетах это опасно. Но, если уж у человека возникла необходимость в округлении, значит исходные данные скорее всего уже не годятся для финансовых расчетов, возможно это могут быть какие-то физические либо математические расчеты. Если уж округлить третий знак, то по сравнению с этим то что делается в 10-12 знаке double - очень маленькая погрешность :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 11:25:34 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
а как округлить число, например: 4.5635 не до 4.564, а до 4.563? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 15:28:22 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. where [roundingMode] is: BigDecimal.ROUND_UP Rounding mode to round away from zero. Always increments the digit prior to a nonzero discarded fraction. Note that this rounding mode never decreases the magnitude of the calculated value. BigDecimal.ROUND_DOWN Rounding mode to round towards zero. Never increments the digit prior to a discarded fraction (i.e., truncates). Note that this rounding mode never increases the magnitude of the calculated value. BigDecimal.ROUND_CEILING Rounding mode to round towards positive infinity. If the BigDecimal is positive, behaves as for ROUND_UP; if negative, behaves as for ROUND_DOWN. Note that this rounding mode never decreases the calculated value. BigDecimal.ROUND_FLOOR Rounding mode to round towards negative infinity. If the BigDecimal is positive, behave as for ROUND_DOWN; if negative, behave as for ROUND_UP. Note that this rounding mode never increases the calculated value. BigDecimal.ROUND_HALF_UP Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up. Behaves as for ROUND_UP if the discarded fraction is >= 0.5; otherwise, behaves as for ROUND_DOWN. Note that this is the rounding mode that most of us were taught in grade school. ROUND_HALF_DOWN Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. Behaves as for ROUND_UP if the discarded fraction is > 0.5; otherwise, behaves as for ROUND_DOWN. BigDecimal.ROUND_HALF_EVEN Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor. Behaves as for ROUND_HALF_UP if the digit to the left of the discarded fraction is odd; behaves as for ROUND_HALF_DOWN if it's even. Note that this is the rounding mode that minimizes cumulative error when applied repeatedly over a sequence of calculations. BigDecimal.ROUND_UNNECESSARY Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary. If this rounding mode is specified on an operation that yields an inexact result, an ArithmeticException is thrown. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 00:45:51 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
есть непонятка! :) пишу: BigDecimal bd = new BigDecimal("45.455"); bd = bd.setScale(2, BigDecimal.ROUND_HALF_DOWN); System.out.println("bd = "+bd.doubleValue()); System.out.println("-----------------------------------------------------"); BigDecimal bc = new BigDecimal("45.455000001"); bc = bc.setScale(2, BigDecimal.ROUND_HALF_DOWN); System.out.println("bc = "+bc.doubleValue()); выводит: bd = 45.45 ---------------------- bc = 45.46 ПОЧЕМУ ТАК? В одном случае округлило так, как надо, а в другом - нет???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 12:26:29 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Да и в другом случае округлило правильно - перечитайте описание: BigDecimal.ROUND_HALF_DOWN Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. Behaves as for ROUND_UP if the discarded fraction is > 0.5 ; otherwise, behaves as for ROUND_DOWN. BigDecimal.ROUND_UP Rounding mode to round away from zero. Always increments the digit prior to a nonzero discarded fraction. Note that this rounding mode never decreases the magnitude of the calculated value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 17:55:54 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
А если нужно не для вычислений, а для простого вывода строки, то String aaa = new java.text.DecimalFormat("0.00").format(YourNumber); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2006, 20:25:21 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Подскажите как преобразовать число к нормальному виду: String buff = Double.toString(rs.getDouble(colName)); в результате число вида 2342423543 получаеться вида: 2.342423543E9 число вида 980 в виде 980.0 Как сделать чтобы число в buff ложилось в нормальном виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:08:16 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Али-бабаПодскажите как преобразовать число к нормальному виду: String buff = Double.toString(rs.getDouble(colName)); в результате число вида 2342423543 получаеться вида: 2.342423543E9 число вида 980 в виде 980.0 Как сделать чтобы число в buff ложилось в нормальном виде. javax.swing.text.NumberFormatter? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:49:16 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Вот мне предложили такой вариант: nf = new DecimalFormat("0.####"); String buff = new String(nf.format(number)); но все равно получаеться не универсально - не всегда известно сколько знаков после запятой. Да и результат получаеться с запятой вместо точки - видно зависит от настроек компьютера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:22:24 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Вот к размышлению : Нуна округлять всегда вниз до 2 знаков после запятой. Входной и выходной параметр double. Используем BigDecimal.ROUND_DOWN. Почти всегда работает правильно ;) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Погрешности погрешности погрешности.... Попробуйте раскоментировать строчку в методе ;) З.Ы. мона канешно не использовать BigDecimal :) но использовали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2008, 19:29:10 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
BigDecimal d = new BigDecimal(1.555); System.out.println(d.setScale(2, RoundingMode.HALF_UP)); получаем 1.55 почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 15:20:20 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
наверное из-за того, что: Код: plaintext 1. 2. 3. результат: 1.55 49 999999999999378275106209912337362766265869140625 1.55 Код: plaintext 1. 2. 3. 1.55 50 0000000010007994433181011117994785308837890625 1.56 См. binary float point - http://www.h-schmidt.net/FloatApplet/IEEE754.html авторNot every decimal number can be expressed exactly as a floating point number ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 15:54:04 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
со стандартом IEEE754 знаком ;) значение 1.55 49 99999999999937... видел. но в процессе установки scale = 2 должно выполнятся округления вверх (в соответствии с режимом округления RoundingMode.HALF_UP). каким образом тогда выполняется округление, если на выходе мы получаем 1.55? получается, если исходное значение не может быть точно представлено в виде числа с плавающей запятой, то и округление такого неточного значения приводит к неточному результату? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2010, 17:06:51 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. конструктор BigDecimal(String val): This is generally the preferred way to convert a float or double into a BigDecimal, as it doesn't suffer from the unpredictability of the BigDecimal(double) constructor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 11:54:45 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
а без BigDecimal, обычный double, как-нибудь округлить можно до 2 знаков ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 15:22:05 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
grokа без BigDecimal, обычный double, как-нибудь округлить можно до 2 знаков ? А смысл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 15:35:14 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Смысл есть в инженерных расчетах, когда надо оценить возможное значение, когда не важно 1, 99 или 2.01 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 15:46:25 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Blazkowiczgrokа без BigDecimal, обычный double, как-нибудь округлить можно до 2 знаков ? А смысл? слово Big пугает особенно когда надо округлить миллион чисел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 16:30:49 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
забыл никСмысл есть в инженерных расчетах, когда надо оценить возможное значение, когда не важно 1, 99 или 2.01 Как-как? Т.е. мы округлим double до 2х знаков после запятой. Получим десятичную погрешность примерно соизмеримую со значением, на которое мы округлили, и это будет важно в каких-то там расчетах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 16:31:10 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
авторКак-как? Т.е. мы округлим double до 2х знаков после запятой. Получим десятичную погрешность примерно соизмеримую со значением, на которое мы округлили, и это будет важно в каких-то там расчетах? Ну например тебе надо заскэйлить картинку, не пихать же туда BigDecimal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 16:33:13 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
grokособенно когда надо округлить миллион чисел Ну, для массивных обработок, можно к разным ухищрениям прибегать. Начните с деление и умножения на 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 16:38:20 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
забыл никНу например тебе надо заскэйлить картинку, не пихать же туда BigDecimal Ну, и не использовать же при этом округление double? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 16:47:18 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
grokособенно когда надо округлить миллион чисел Если прям действительно узкое место и диапазон значений достаточно узкий, то можно вообще на битовых операциях округлить. Хотя не факт что будет быстрее умножения\деления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 16:54:15 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
авторНу, и не использовать же при этом округление double? В общем случае вы правы, просто был случай когда после рескейла надо было вывести на экран информацию о том, насколько картинка была масштабирована, и вот именно в этом случае мне нужно было округление доубла, но это редко, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 17:05:05 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
забыл никВ общем случае вы правы, просто был случай когда после рескейла надо было вывести на экран информацию о том, насколько картинка была масштабирована, и вот именно в этом случае мне нужно было округление доубла, но это редко, да - Именно в этом случае потери производительности при использовании BigDecimal ни на что не влияют. У вас одно значение scale для одной картинки. - А главное то что в этом случае вам и округлять не нужно было вообще. При выводе лишнее обрезается через NumberFormat или форматированый вывод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 17:08:25 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
BigDecimal a = new BigDecimal("12345678.132"); System.out.println(a.add(new BigDecimal("1"), new MathContext(2, RoundingMode.HALF_EVEN)).toPlainString()); Ожидаю: 12345679.13 Получаю: 12000000 WTF!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 15:51:59 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
MathContext(2, ... с точностью в 2 цифры precision - the number of digits to be used for an operation; results are rounded to this precision это не "после запятой", это - "вообще" используйте 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 15:58:43 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
BlazkowiczMathContext(2, ... с точностью в 2 цифры precision - the number of digits to be used for an operation; results are rounded to this precision это не "после запятой", это - "вообще" используйте 0 Понял, спс. А что делать когда возникает ситуация наподобие 1/3, когда в результате получаем 0.3333.....3? В такие моменты вылетает эксепшн "java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 16:22:44 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
z0z0iberg BlazkowiczMathContext(2, ... с точностью в 2 цифры precision - the number of digits to be used for an operation; results are rounded to this precision это не "после запятой", это - "вообще" используйте 0 Понял, спс. А что делать когда возникает ситуация наподобие 1/3, когда в результате получаем 0.3333.....3? В такие моменты вылетает эксепшн "java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result". Догнал сам: System.out.println(new BigDecimal("1").divide(new BigDecimal("3"), 2, RoundingMode.HALF_EVEN).toPlainString()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2012, 16:25:10 |
|
||
|
Округление в JAVA
|
|||
|---|---|---|---|
|
#18+
Вижу за это время вопрос десятичного округления не прояснился: люди то преобразуют double в BigDecimal через строку (без комментариев) то в стиле round(45.457*100)/100.00. Про неточность этого метода уже писалось выше. Далее точный метод десятичного округления: Код: java 1. 2. 3. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вывод: paramDouble=13.5464999999999999857891452847979962825775146484375 bd=13.5465000000000 bdRounded=13.547 Округление BigDecimal без myMathContext = 13.546 Т.е. нет ошибки конструктора new BigDecimal(double). Есть известная погрешность двоичного представления и правильный способ преобразования double в BigDecimal с использованием MathContext. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2013, 14:00:41 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2128255]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 449ms |

| 0 / 0 |
