![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FloatToStr и другое... [D7, XP]
Wood © (2007-06-14 12:49:00)Уважаемые мастера.
Есть некая функция (не моя) округления дробных чисел до 2х знаков после запятой..
Посылая ей Extended получаю строку в формате '0,00'. Но по непонятным причинам иногдавозвращается '0,0000....'. При трассировке вижу нормально округленное число (extended), но после преобразования в FloatToStr() результат получается "длиннее" параметра (знаков после запятой становится больше). На функцию я не грешу, грешу на свои ошибки, которые пока не вижу. Но все же, может ли быть само по себе такое? И может ли быть.. эм.. "мусор" в значении результата, к примеру, 0,789999..?
Спасибо.
PS:"Я спросил у яндекса... Я спросил у рамблера..."(с))
Anatoly Podgoretsky (2007-06-16 11:27:00) [1]> Wood (16.06.2007 10:46:11) [11]
Ну ты то забавляешься в молодости.
Wood (2007-06-16 10:46:00) [2]
> Anatoly Podgoretsky © (15.06.07 16:06) [9]
генетики, млин :)) ДНК...РНК... Все бы забавлялись на старости лет :-)
> Alex_C © (15.06.07 18:41) [10]
Спасибо. Я никогда не сравнивал 2 числа с плавающей точкой...
И я получил ответы на свои вопросы.
Alex_C (2007-06-15 18:41:00) [3]То Wood: объясню без лишних приколов - ты столкнулся с проблемой чисел с плавающей точкой. Суть этой проблемы в том, что дельфя тебе показывает ОКРУГЛЕННОЕ значение переменной при трассировке. Т.е. ты видишь 8.12, а на самом деле имеем 8.119999999999... эта проблема достаточно сложна. В [7] ссылка на нее дана . Прочитай.
И еще на будущее. Никогда не сравнивай 2 числа с плавающей точкой на равенство. На вид они будут вроде равны, а рез-т будет не таким.
Anatoly Podgoretsky (2007-06-15 16:06:00) [4]> Wood (15.06.2007 14:50:08) [8]
> ошибка в днк вообще не может быть - по определению.
Это означает, что только в случае отсутствия.
Wood (2007-06-15 14:50:00) [5]
> Плохиш © (15.06.07 11:00) [6]
ошибка в днк вообще не может быть - по определению. Зачем нозить-то?
что тут смотреть-то передается в функцию extended и возвращается строка все...
Видимо, трудно ответить да или нет на основной вопрос ветки...
> sniknik © (15.06.07 11:25) [7]
сенкс, почитаю...
sniknik (2007-06-15 11:25:00) [6]> я вижу 9933.78.
ты видиш не число... (ложки нет) ты видиш его строковое представление в виде определяемом какими то правилами...
а у чисел с плавающей запятой нет понятия количества символов после нее... а вообще вот
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
Плохиш (2007-06-15 11:00:00) [7]
> На функцию я не грешу, грешу на свои ошибки, которые пока
> не вижу.
Думаешь нам твои ошибки отсюда виднее. Хотя одну я вижу - это ошибка в ДНК...
Wood (2007-06-15 04:56:00) [8]
> Ega23 © (14.06.07 13:00) [1]
>
> чему равно 0.999999999999999999999999999999999999999999?
>
1,0
> kukuikar © (14.06.07 13:03) [2]
>
> FloatToStrF(VAL,ffFixed,10,2) - чем не походит?
>
подходит, но речь пока не об этой функции
> Правильный Вася (14.06.07 13:05) [3]
> Anatoly Podgoretsky © (14.06.07 13:08) [4]
>
> > При трассировке вижу нормально округленное число (extended)
>
> не бывает такого
может не так поняли меня.. Число, к примеру, 9933.7828, которое при FloatToSTr() получается 9933.7899999 при трассировке и наведению на результ мышью я вижу 9933.78.
Более того, результат функции не всегда такой, чаще после запятой 2 знака.
Значит, на мой вопрос
Но все же, может ли быть само по себе такое? И может ли быть.. эм.. "мусор" в значении результата, к примеру, 0,789999..?
ответ - нет?
Anatoly Podgoretsky (2007-06-14 13:08:00) [9]
> не бывает такого
Вообще не может быть - по определению
Правильный Вася (2007-06-14 13:05:00) [10]
> При трассировке вижу нормально округленноечисло ( extended)
не бывает такого
kukuikar (2007-06-14 13:03:00) [11]FloatToStrF(VAL,ffFixed,10,2) - чем не походит?
Ega23 (2007-06-14 13:00:00) [12]чему равно 0.999999999999999999999999999999999999999999?