|
|
|
Округление чисел с плавающей запятой!!!!
|
|||
|---|---|---|---|
|
#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?fid=59&msg=33587199&tid=2149990]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
290ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 199ms |
| total: | 603ms |

| 0 / 0 |
