|
|
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Народ, может кто сталкивался. По какой-то причине при округлении чисел с плавающей запятой, цифра "5" округляется до меньшего, напимер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вывод на экран : ROUND_HALF_DOWN = 13.546 ROUND_HALF_EVEN = 13.546 ROUND_HALF_UP = 13.546 если же Код: plaintext Вывод на экран : ROUND_HALF_DOWN = 13.547 ROUND_HALF_EVEN = 13.547 ROUND_HALF_UP = 13.547 Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:14 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hНарод, может кто сталкивался. По какой-то причине при округлении чисел с плавающей запятой, цифра "5" округляется до меньшего, напимер: Советую почитать книгу как хранятся числа с плавующей точкой, и каким образом происходит округление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:41 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Евгений ПутилинСоветую почитать книгу как хранятся числа с плавующей точкой, и каким образом происходит округление. Молодца!!! Совет конечно дельный, не к месту ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 13:47 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Нашёл!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:10 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
ну и в чем фишка ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:12 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
galishaну и в чем фишка ? Фишка ... ... Всё просто ... пишем свою функцию округления ... От Java я ожидал большего и был склонен думать, что просто по своему незнанию делаю округление неправильно, но количество отзывов на мою проблему (особенно на меня произвело незгладимое впечатление выскаживание товарища Евгения Путилина ) наводит на мысль, что глюк всё-таки в библиотеке языка программирования. Хотя могу и ошибаться (это только сугубо моё предположение) и возможно на этом форме найдётся человек, который даст верное решение. Заранее ему спасибо . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:33 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h ... Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 14:46 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
mozheyko_d andy_h ... Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 Код: plaintext 1. Фишка в том, что данный вызов (как и при BigDecimal.ROUND_CEILING) "превратит" в 13.547 даже число 13.5461 , что отходит от общих норм, например в MS Excel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 15:30 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h(особенно на меня произвело незгладимое впечатление выскаживание товарища Евгения Путилина ) наводит на мысль, что глюк всё-таки в библиотеке языка программирования. Какие все умные... блин... Ошибка в библиотеке и все тут! Если в доке написано, что то делается так, а не иначе, значит это делается так, как написано в доке! Как говорится: "Дай человеку рыбу - и ты накормишь его один раз. Научи его ловить рыбу - и ты накормишь его на всю жизнь". Так что совет читать книги тебе дали правильно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 22:58 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hНарод, может кто сталкивался. По какой-то причине при округлении чисел с плавающей запятой, цифра "5" округляется до меньшего, напимер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вывод на экран : ROUND_HALF_DOWN = 13.546 ROUND_HALF_EVEN = 13.546 ROUND_HALF_UP = 13.546 если же Код: plaintext Вывод на экран : ROUND_HALF_DOWN = 13.547 ROUND_HALF_EVEN = 13.547 ROUND_HALF_UP = 13.547 Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 Предлагаю вспомнить из азов, что число 0.1 (одна десятая) в двоичном виде не представима конечным образом. Число 13.5465 тоже. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 09:36 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hНарод, может кто сталкивался. По какой-то причине при округлении чисел с плавающей запятой, цифра "5" округляется до меньшего, напимер: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вывод на экран : ROUND_HALF_DOWN = 13.546 ROUND_HALF_EVEN = 13.546 ROUND_HALF_UP = 13.546 если же Код: plaintext Вывод на экран : ROUND_HALF_DOWN = 13.547 ROUND_HALF_EVEN = 13.547 ROUND_HALF_UP = 13.547 Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 Предлагаю вспомнить, что число 0.1 (одна десятая) в двоичном виде не представима конечным образом. Число 13.5465 тоже. Друними словами, в типе double они не могут быть представлены точно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Типы double и float слудет использовать только в научных расчетах. Чтобы считать деньги, они не подходят. Для похожести с Excel нужно использовать BigDecimal.ROUND_HALF_UP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 09:43 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hФишка в том, что данный вызов (как и при BigDecimal.ROUND_CEILING) "превратит" в 13.547 даже число 13.5461 , что отходит от общих норм, например в MS Excel Да, ужас MS Excel это уже обще принятая норма. Сразу видно что человек совершенноне понимает разницу между числом с плавающей точкой и числом с фиксированной точкой. Еще раз советую почитай какиюнибуть книгу по численным методам и тогда не будет глупых вопросов, человек из Краснодара правильно написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 10:21 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Типы double и float слудет использовать только в научных расчетах. Чтобы считать деньги, они не подходят. Для похожести с Excel нужно использовать BigDecimal.ROUND_HALF_UP. Почему-то люди сразу думают о деньгах, хотя я работаю в НИИ и рассчёты как раз научные. BigDecimal.ROUND_HALF_UP - схожести с Excel не даёт (собственно, практически с этой константой мой вопрос и начинался) " Умникам ", любящим давать советы по прочтению той или иной литературы + филосовские изречения про рыбку, птичку и т.п. и не более того , могу только сказать, что книги безусловно читать надо (кстати, ни автора - ни названия указано не было, просто воздух потрясли), но форум для того и создан (на мой взгляд), чтобы помагать решать возникшие проблемы в быстром порядке. Теперь о глюках . Может я и слишком резко высказался по этому поводу (с Java я работаю недавно), но в Object Pascal (ток не надо снова умничать :"Вот и пиши на своем Пасквиле" ) есть функция Код: plaintext Код: plaintext 1. 2. 3. В результате я пришёл к выводу, что нужно писать свою функцию, где нужно: умножать->округлять до целого->делить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 10:49 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h Типы double и float слудет использовать только в научных расчетах. Чтобы считать деньги, они не подходят. Для похожести с Excel нужно использовать BigDecimal.ROUND_HALF_UP. Почему-то люди сразу думают о деньгах, хотя я работаю в НИИ и рассчёты как раз научные. Ага, а в НИИ про численные методы не слышали? andy_h BigDecimal.ROUND_HALF_UP - схожести с Excel не даёт (собственно, практически с этой константой мой вопрос и начинался) andy_h " Умникам ", любящим давать советы по прочтению той или иной литературы + филосовские изречения про рыбку, птичку и т.п. и не более того , могу только сказать, что книги безусловно читать надо (кстати, ни автора - ни названия указано не было, просто воздух потрясли), Это то что дает поиск на озоне по численным методам Думаю это достаточно? andy_h но форум для того и создан (на мой взгляд), чтобы помагать решать возникшие проблемы в быстром порядке. Теперь о глюках . Может я и слишком резко высказался по этому поводу (с Java я работаю недавно), но в Object Pascal (ток не надо снова умничать :"Вот и пиши на своем Пасквиле" ) есть функция Код: plaintext Код: plaintext 1. 2. 3. В результате я пришёл к выводу, что нужно писать свою функцию, где нужно: умножать->округлять до целого->делить Ты что округляеш? тип числа какой? если это так и стоит в программе почему ты думаеш что это не число с фиксированной точкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 12:15 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h " Умникам ", любящим давать советы по прочтению той или иной литературы + филосовские изречения про рыбку, птичку и т.п. и не более того , могу только сказать, что книги безусловно читать надо (кстати, ни автора - ни названия указано не было, просто воздух потрясли), но форум для того и создан (на мой взгляд), чтобы помагать решать возникшие проблемы в быстром порядке. ... В результате я пришёл к выводу, что нужно писать свою функцию, где нужно: умножать->округлять до целого->делить Мужык, я тебя люблю. Давай вместе похороним java? Это же не в какие ворота не лезет, какая тупая язычина. Даже окргулять как паскаль не умеет (не говоря уже про эксель). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 12:24 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Евгений если это так и стоит в программе почему ты думаеш что это не число с фиксированной точкой? потому что по умолчанию числа типа 3.14, 5.44 итд имеют тип double. т.е. Код: plaintext 1. 2. 3. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 12:25 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин Ты что округляеш? тип числа какой? если это так и стоит в программе почему ты думаеш что это не число с фиксированной точкой? ))) Умнейший !!! Что ж Вы всё пишите и пишите, а ответа я так пока не получил. Раз Вы так хорошо разбираетесь в этой теме и жёстко цепляетесь к терминологии. Давайте поступим следующим образом: 1 . Назовём числа 13.5461 и 13.5465 - вещественными . 2 . Напишите мне, ПОЖАЛУЙСТА , последовательность операторов на языке Java , неважно: толи через BigDecimal , толи через DecimalFormat , или любым другим известным Вам способом, но чтобы, при округлении 13.5465 до 3-х знаков после запятой получалось 13.547 , а число 13.5461 - 13.546 , соответственно. И всё ... Мне больше ничего не требуется ... В противном случае, на данном форуме, можно давать людям однотипные ответы на все их вопросы: "Читай книгу по Java, EJB, JDBC и пр." А форум закрыть, за ненадобностью .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 12:49 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Форум, уважаемый, нужен для вопросов, ОТВЕТЫ НА КОТОРЫЕ НЕ ПОЛУЧАЕТСЯ НАЙТИ В КНИГАх!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:19 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Во! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:23 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин > Форум, уважаемый, нужен для вопросов, ОТВЕТЫ НА КОТОРЫЕ НЕ > ПОЛУЧАЕТСЯ НАЙТИ В КНИГАх!!!Тема==Ответить спокойнее. я тоже не понял. в книге написано, что данный код выведет 1.235, а выводит 1.234. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:24 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Объясни мне пожалуйста, почему у меня вот это работает? Код: plaintext 1. 2. 3. 4. 5. 6. TEST: 13.547 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:32 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
нашел решение: Код: plaintext 1. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:37 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманВо! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. :-) Круто!!!!!! А теперь напиши мне ещё тысяч 5 (примерно столько записей в таблице БД) таких функций, правда значения иногда меняются, но я в тя верю, справишься :-))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:37 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Deady Кувалдин > Форум, уважаемый, нужен для вопросов, ОТВЕТЫ НА КОТОРЫЕ НЕ > ПОЛУЧАЕТСЯ НАЙТИ В КНИГАх!!!Тема==Ответить спокойнее. я тоже не понял. в книге написано, что данный код выведет 1.235, а выводит 1.234. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 Честно говоря, в доке по API я не нашел факта, что он округляет 0.5 до 1 или до 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:39 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. TEST2: 1.234 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:39 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин > Честно говоря, в доке по API я не нашел факта, что он округляет 0.5 до 1 или до 0.Тема==Ответить Rounding DecimalFormat uses half-even rounding (see ROUND_HALF_EVEN) for formatting. ROUND_HALF_EVEN public static final int 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. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:42 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Посмотрел исходники класса BigDecimal. Вот: Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:49 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h 1 . Назовём числа 13.5461 и 13.5465 - вещественными . Остановись. Помедитируй. Запись 13.5461 может представлять вещественное число с фиксированной точной, а может представлять вещественное число с плавающей точкой. Проглядывает свет в конце тунеля? 2 . Напишите мне, ПОЖАЛУЙСТА , последовательность операторов на языке Java , ... но чтобы, при округлении 13.5465 до 3-х знаков после запятой получалось 13.547 , а число 13.5461 - 13.546 , соответственно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. И всё ... Мне больше ничего не требуется ... Отнюдь! Тебе требуется знание двойичной и десятичных систем счисления, знание десятичных дробей и двух способов представления вещественных чисел. И не забыть подумать, почему создавать 256 объектов для одной операции округления не совсем уместно. В противном случае, на данном форуме, можно давать людям однотипные ответы на все их вопросы: "Читай книгу по Java, EJB, JDBC и пр." А форум закрыть, за ненадобностью .... А как тебе идея, что всё что нужно тебе сказали в первых нескольких ответах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:51 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
* Note: the results of this constructor can be somewhat unpredictable. * One might assume that <tt>new BigDecimal(.1)</tt> is exactly equal * to .1, but it is actually equal * to .1000000000000000055511151231257827021181583404541015625. * This is so because .1 cannot be represented exactly as a double * (or, for that matter, as a binary fraction of any finite length). * Thus, the long value that is being passed <i>in</i> to the constructor * is not exactly equal to .1, appearances notwithstanding. * <p> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:52 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Так что, andy_h, могу посоветовать вам преобразовывать double-значения в String-значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 13:54 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманОбъясни мне пожалуйста, почему у меня вот это работает? Код: plaintext 1. 2. 3. 4. 5. 6. TEST: 13.547 Объясняю: "13.5465" - строка, 13.5465 - число ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 14:05 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h Кувалдин РоманОбъясни мне пожалуйста, почему у меня вот это работает? Код: plaintext 1. 2. 3. 4. 5. 6. TEST: 13.547 Объясняю: "13.5465" - строка, 13.5465 - число Вы бы вдумались в то, что Вам другие говорят. Если какие-то слова в ответе не понятны - спросите. Моя жена отнюдь не проргаммист и не математик, но в отличие от Вас, тему с округлениями усвоила с первого раза. Тогда я ей демострировал нечто вроде этого ( только на Visual Basic'е ): Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 14:20 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs .... Остановись. Помедитируй. ... Код: plaintext 1. 2. 3. 4. 5. andy_h ... В результате я пришёл к выводу, что нужно писать свою функцию, где нужно: умножать->округлять до целого->делить ... Теперь сам остановись, помедитируй .... И подумай, что нового ты предложил? тоже самое: писать свою функцию, где именно нужно: умножать->округлять до целого->делить NotGonnaGetUs ... Мужык, я тебя люблю. Давай вместе похороним java? Это же не в какие ворота не лезет, какая тупая язычина. Даже окргулять как паскаль не умеет (не говоря уже про эксель). Над этим тоже подумай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 14:21 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hТеперь сам остановись, помедитируй .... И подумай, что нового ты предложил? А разве я должен был предложить что-то новое? Открой зёнки, почитай что ты писал: andy 2. Напишите мне, ПОЖАЛУЙСТА, последовательность операторов на языке Java, ... но чтобы, при округлении 13.5465 до 3-х знаков после запятой получалось 13.547, а число 13.5461 - 13.546, соответственно. Даже волшебное слово вспомнил..., а тут взял и обкакался. andyНад этим тоже подумай Над чем? Над моими чувствами к тебе? Хорошо. Подумал. Легче не стало. Всё ещё люблю до беспаметства за твою не поддельную простоту и наивную упёртось в то, чего в сущности не существует: в "проблемы" java с округлением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 14:32 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hТеперь сам остановись, помедитируй .... И подумай, что нового ты предложил? тоже самое: писать свою функцию, где именно нужно: умножать->округлять до целого->делить Еще раз: Код: plaintext 1. 2. 3. и Код: plaintext Может теперь хватит? Проблема округления совершенно стандартна для вещественных чисел, которые нельзя представить в виде X*2^Y. Складывается ощущение, что вы о ней ни разу не слышали. Предлагаю закрыть топик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:01 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманПроблема округления совершенно стандартна для вещественных чисел, которые нельзя представить в виде X*2^Y. Складывается ощущение, что вы о ней ни разу не слышали.А что, оно там как-то так хранится? А я думал, что там хранится длинное целое число плюс число позиций, на которую сдвинуть запятую... Кувалдин РоманПредлагаю закрыть топик.А мне интересно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:05 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
ежемуха > А я думал, что там хранится длинное целое число плюс число > позиций, на которую сдвинуть запятую... как вы число 2 сохраните в компьютере? если есть только цифры 0 и 1 ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:09 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Легче не стало. ... в "проблемы" java с округлением. Дорогой коллега, и все участники данного обсуждения. Целью создания данного топика было выяснить для себя: andy_h ... каким махером выполнять округление Если бы цель была узнать как хранятся числа с плавующей точкой или каким образом происходит округление, то уж поверьте, название было бы другим. Хорошо ещё, что про работу CPU и FPU никто не вспомнил, хотя могли. А если, вместо вызова одной функции из какой-нить стандартной библиотеки, для округления мне надо что-то переводить в стринг и т.п., то ... чего-то разработчики не додумали или просто забыли ... Ладно, всем спасибо, если кого обидел - извините ... Тема исчерпана ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:14 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
ежемуха Кувалдин РоманПроблема округления совершенно стандартна для вещественных чисел, которые нельзя представить в виде X*2^Y. Складывается ощущение, что вы о ней ни разу не слышали.А что, оно там как-то так хранится? А я думал, что там хранится длинное целое число плюс число позиций, на которую сдвинуть запятую... Формат числа с плавающей запятой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:17 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
[OFF]Мельчает программист...[/OFF] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:19 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Deady ежемуха > А я думал, что там хранится длинное целое число плюс число > позиций, на которую сдвинуть запятую... как вы число 2 сохраните в компьютере? если есть только цифры 0 и 1Ну, как-то вот так: 10 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:23 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
а 0.2? здесь я имею ввиду что не каждое число с дробной частью можно записать 0ми и 1ами ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:25 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Deadyа 0.2? здесь я имею ввиду что не каждое число с дробной частью можно записать 0ми и 1ами Ну я как думаю (статью еще не прочел), мы храним отдельно число 2 и отдельно число -1 (тоже в двоичном виде) 2 * 10^ -1 то есть сдвинуть запятую на 1 вправо..... нет? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:30 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
тогда 2.2, сдвигать дальше некуда. как 22e2 представлять нельзя (не по правилам). ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:31 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
эээээ.... или надо чтобы там не 10 было а 2?... кажется щас допру... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:31 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
ежемуха Deady ежемуха > А я думал, что там хранится длинное целое число плюс число > позиций, на которую сдвинуть запятую... как вы число 2 сохраните в компьютере? если есть только цифры 0 и 1Ну, как-то вот так: 10 :) Народ, ещё раз повторюсь. Тема была "Как округлять?" , а не b]"Как хранится?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:32 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h Народ, ещё раз повторюсь. Тема была "Как округлять?" , а не b]"Как хранится?" Так если щас выяснится что если компьютер не может успешно отличить 13.5465000000000000000000000000000001 от 13.5464999999999999999999999999999999 то тогда и выяснится, что никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:37 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hДорогой коллега, и все участники данного обсуждения. Целью создания данного топика было ... Вот скажи мне. Если ты знаешь, что было целью данного топика, то почему было сразу не написать об этой цели? Например, "хочу округлить до Ё-ной цифры после запятой, написав одну строчку кода ХХХ.yyy(my_double_value, Ё). Есть ли ХХХ.yyy в jdk1.5?" Всё. Ответ мог быть "да есть, вот: ****" и "нет такого". Вместо этого ты начинал нести пургу про паскаль с экселем. Когда тебе объяснили, почему эти двое курят в сторонке, ты стал всех куда-то посылать и о чём нераборчиво просить, вероятно, пытаясь показать, кто здесь ГрафМонтеКристо, а кто нет. Ну к чему оно было надо, а? Если ты так же пишешь программы, как общаешься на этом форуме, то мне просто жалко того человека, что платит тебе деньги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:38 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Я все понял. (Объяснить не могу:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:45 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
javaScript != java ... Вот скажи мне. Если ты знаешь, что было целью данного топика, то почему было сразу не написать об этой цели? ... Это я и написал в самом-самом начале ... andy_h Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 Где здесь про Excel ??? Кусок кода в начале ещё добавил. Сказали бы: "Не, мужик!!! Это делается не так, а вот так!!!". Нет же ... сразу в библиотеку посылают, или в "любви" признаются. А по сути - ничего ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:52 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
ежемуха > andy_h Народ, ещё раз повторюсь. Тема была "Как округлять?", а не b]"Как хранится?" > Так если щас выяснится что если компьютер не может успешно отличить > 13.5465000000000000000000000000000001 от > 13.5464999999999999999999999999999999 > то тогда и выяснится, что никак?Тема==Ответить примерно так и есть, только числа надо аккуратнее подобрать. с этими может и будет разница. ----------------------------------- The Bat + My Gate Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:52 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h Где здесь про Excel ??? Кусок кода в начале ещё добавил. Сказали бы: "Не, мужик!!! Это делается не так, а вот так!!!". Нет же ... сразу в библиотеку посылают, или в "любви" признаются. А по сути - ничего ... Вот отсюда все начали кипеть: /topic/268869&pg=-1#2421411 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:08 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин Роман Вот отсюда все начали кипеть: /topic/268869&pg=-1#2421411 А я отсюда /topic/268869&pg=-1#2421093 Я человека спрашиваю по методы округленя в Java, а он меня посылает изучать численные методы (типа умный). Рома, вот ты любишь всякие алегории, особенно про рыбалку. Вот ты приходишь и говоришь: "Научи меня ловить рыбу". А тебе отвечают:"Иди-ка поучись бамбук для удочек выращивать". Так и здесь .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:25 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h ... Это я и написал в самом-самом начале ... ... Поэтому и жалко твоего работодателя. Если ты пишешь так, что тебя все понимают не правильно, значит либо все дураки, либо у тебя что-то не так. andy_h Подскажите, каким махером выполнять округление, чтобы число 13.5465 всё-таки "превращалось" в 13.547 Почитай, что ты ответил, после того, как тебе показали как это можно сделать. andy_h Где здесь про Excel ??? Все ходы записаны. Вот тут http://www.sql.ru/forum/actualthread.aspx?tid=268869&pg=1#2421715 andy_h Кусок кода в начале ещё добавил. Код пишешь ты. Код исполняется всегда правильно. Если в итоге его исполения, ты получил не тот результат что ожидал, то ошибся ты. Не согласен? Почему код написанный в начале не делал то, что ты хотел тебе много раз писали. Это даже больше чем простое "Не, мужик!!! Это делается не так, а вот так!!!". Но вместо спасибо, ты говоришь совсем другие слова. andy_h Нет же ... сразу в библиотеку посылают, или в "любви" признаются. А по сути - ничего ... Любовь зла, полюбишь и кого угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:26 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs ... Почему код написанный в начале не делал то, что ты хотел тебе много раз писали. Это даже больше чем простое "Не, мужик!!! Это делается не так, а вот так!!!". ... Ну, если для Вас, молодой человек, диагностика проблемы - это уже её устранение, то ... . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:51 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hРома, вот ты любишь всякие алегории, особенно про рыбалку. Вот ты приходишь и говоришь: "Научи меня ловить рыбу". А тебе отвечают:"Иди-ка поучись бамбук для удочек выращивать". Так и здесь .... Гы :-) Если я приду и спрошу "Как ловить рыбу?" - меня пошлют читать многочисленные пособия по рыбалке. И правильно. А вот вопрос в духе "на какого мотыля лучше ловятся карпы в подмосковье?" - это уже более сложный и узкий вопрос, и по нему литературы так просто не найти. Я всегда пишу свои обработчики округления с заданной мне точностью именно по принципу "умножил-отбросил-разделил", так как проблема округления вещественных чисел мне известна еще со времен C++. Боолее того, это общепринятая практика для численных методов - только так ты можешь гарантировать отсутствие погрешности при округлении. И я никогда не пользовался BigDecimal до сегодняшнего дня. Тем не менее, мне хватило нескольких минут для того, чтобы заглянуть в исходники класса BigDecimal и увидеть там, откуда растут ноги твоей проблемы. Ты мог сделать те же самые шаги. Но почему-то поленился это сделать, а обратился в форум. Согласись, вопрос явно не из серии узкоспециализированных, и недостоин форума, если для его решения нужно полчаса? Я собственно к тому, что новое поколение (блин, мне всего 25 лет, а я говорю про другое поколение) зачастую хочет достать готовое решение. Это хорошо с точки зрения "сделал и забыл", но ни разу не правильно с точки зрения профессионального роста. Мне довелось попрограммировать на ассемблере для ZX Spectrum, в основном методом Научного-Тыка. Это был великолепный опыт, к сожалению, не понадобившийся мне в дальнейшем. Из подобных вещей и складывается умение решать проблемы самостоятельно, а также инженерное мышление и спсобность на нестандартные решения. И то, что новые программисты зачастую не знают ничего, кроме паттернов (да и тех толком не знают) - вот что меня беспокоит по-настоящему. И я так думаю - не одного меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 17:15 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин Роман И то, что новые программисты зачастую не знают ничего, кроме паттернов (да и тех толком не знают) - вот что меня беспокоит по-настоящему. И я так думаю - не одного меня. Абсолютно с тобой согласен. Более того я уже ранее говорил, что в Яве новичок. А на форум обратился только потому, что не нашёл стандартного метода и никто из моих знакомых Джаверов ответа не дал. Написать свой метод - это последний вариант, по крайней мере, когда надо сделать и забыть. Просто ожидал большего от этого языка. Возьми, например, класс String: сколько методов для работы со строкой. В том же Паскале для тех же целей много приходилось писать ручками. Поэтому, отсутствие roundTo(double d, int digit) - несколько обескуражило, неужели трудно было добавить его в Math? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 17:45 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
Кувалдин Роман Гы :-) Если я приду и спрошу "Как ловить рыбу?" - меня пошлют читать многочисленные пособия по рыбалке. И правильно. И опять-таки, пособие по рыбалке (т.е. по языку Java), а не по ловле мотыля (в данном случае - численные методы) :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 17:52 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hПоэтому, отсутствие roundTo(double d, int digit) - несколько обескуражило, неужели трудно было добавить его в Math? Наверно, это испортило бы концепцию. Люди бы стали относиться к отображению технического числа с плавающей точкой двойной длины слишком серьезно. Наверно смысл был в том, чтобы сильнее отделить отображение числа от его хранения, чтобы у людей не возникало соблазна хранить в них серьезные десятичные величины типа денег. А так ясно, что десятичное отображение числа с плавающей точкой - это совсем примерная цифра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 17:55 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_hПросто ожидал большего от этого языка. Возьми, например, класс String: сколько методов для работы со строкой. В том же Паскале для тех же целей много приходилось писать ручками. Поэтому, отсутствие roundTo(double d, int digit) - несколько обескуражило, неужели трудно было добавить его в Math? Ну так и добавили. BigDecimal.ROUND_HALF_UP делает именно то, что тебе надо - если не забывать о косяке округления и делать так, как советуют сами разработчики языка - сначала преобразовать из double в String - это исключит потерю точности. Вот так надо было написать: new BigDecimal(""+d).setScale(3, BigDecimal.ROUND_HALF_UP)); Да, понимаю, добавили немного не в том месте, где ожидалось... Этому есть свои причины. Теперь-то можно дискуссию закрывать? Или ты, как и я, не можешь оставить последнее слово за оппонентом? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 18:00 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
ежемуха andy_hПоэтому, отсутствие roundTo(double d, int digit) - несколько обескуражило, неужели трудно было добавить его в Math? Наверно, это испортило бы концепцию. Люди бы стали относиться к отображению технического числа с плавающей точкой двойной длины слишком серьезно. Наверно смысл был в том, чтобы сильнее отделить отображение числа от его хранения, чтобы у людей не возникало соблазна хранить в них серьезные десятичные величины типа денег. А так ясно, что десятичное отображение числа с плавающей точкой - это совсем примерная цифра Скорее для того, чтобы отделить hardware-dependent значение (double на 32-битных x86, 64-битных AMD и Itanium, маках с прямым порядком байтов etc) от hardware-independent BigDecimal, который по спецификации будет одинаков для всех систем. Например, для меня стало сюрпризом, что int в C++ - это не всегда 32 бита, а в общем-то зависит от разрядности процессора. В таких случаях косяки по переполнению могут полезть в самых неожиданных местах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 18:05 |
|
||
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#18+
andy_h ))) Умнейший !!! Что ж Вы всё пишите и пишите, а ответа я так пока не получил. Раз Вы так хорошо разбираетесь в этой теме и жёстко цепляетесь к терминологии. Давайте поступим следующим образом: 1 . Назовём числа 13.5461 и 13.5465 - вещественными . К сожалению компьтер не умеет работать с вещественными числами только с рациональными представленными в виде числа с фиксированной или плавающей точкой. Все это является элементарными знаниями по численным методам. Тебе рекомендуют их читать не потому что нельзя сделать так как ты хочеш, а потому что задаеш не правильные вопросы. Потом java оптимизированна под процессоры Sun: UltraSPARC. Т.е. работа с числами в некоторых случаях эмулируется, и поведение совершенно отличается от того как будет работать код тогоже паскаля который исполняется в просессорозависимых командах. Не знаю естли для спарков pascal, но на С++ я на них словил очень интересную ошибку в виде bus error. По поводу RoundTo, с чего ты взял что поведение аналогичной конструкции в java будет аналогично Pascal? По поводу Excel могу тебе сказать что там число будет хранится в виде фиксированной точки до тех пор пока это будет возможно по этому сравнение не удачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 18:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2149990]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
441ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 809ms |

| 0 / 0 |
