Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо