Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2009, 12:54   #1
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию странная реакция FloatToStr

vis_list элемент TStringGrid
elem.beg - double

есть код:
Form2->vis_list->Cells[1][i]=FloatToStr(elem.beg);

В коде происходит динамическое выделение памяти и если её не хватает, то отлавливаем исключение и делаем поправки, и вроде всё замечательно, но после исключения все TEdit на форме и ячейкм Grid'a выводят числа в странном формате, например
до: 0,5

после: 0,499999992153375

ощущение, что настройки функции сбились потому что из 0.5 сложно получить 0,499999992153375 не превращая его во флоат и обратно в дабль. Подскажите в чём тут дело.
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 12:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Используй форматирующий ее аналог FloattoStrF Если он в твоем Си есть.
Цитата:
из 0.5 сложно получить 0,499999992153375
ошибаешся....
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2009, 14:09   #3
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

это я уже пробовал - эффект идентичный абсолютно, ставил ffGeneral, 16,15 а толку то... ощущение что процедура сначала переводит дабль к флоату а потом обратно, а уже после этого переводит его... не знаю что и придумать
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 14:22   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Не знаю. Взял для примера:
Код:
double d = 2.0/4.0;
И вывел на экран по очереди посредством преобразований:
Код:
FloatToStr(d); // Вывелось 0,5
FloatToStrF(d, ffGeneral, 5, 2); // Так же 0,5
Пробовал даже описать d как float, а не double. Результат тот же.
Да и вообще FloatToStr принимает Extended, который точнее, чем double.
pu4koff вне форума Ответить с цитированием
Старый 29.05.2009, 16:05   #5
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

Да до исключения "Нехватка ресурсов" она у меня тоже нормально работала, а вот после исключения странно, причём исключение вызывается при нехватке памяти объектом TBitmap =)) Добавь ради интереса к своему коду:
Код:
try
{
   bit.width=1000000000;
   bit.height=1000000000;
} catch(...)
{
  bit.width=0;
  bit.height=0;
}
а после воспользуйся FloatToStr
интересно эффект будет тот же или нет

Последний раз редактировалось Sazary; 29.05.2009 в 16:10.
CrazyXaoc вне форума Ответить с цитированием
Старый 29.05.2009, 16:23   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bit = new Graphics::TBitmap;
try
 {
  bit->Width=1000000000;
  bit->Height=1000000000;
 } catch(...)
 {
  bit->Width=0;
  bit->Height=0;
 }
 double d = 2.0/4.0;
 Edit1->Text = FloatToStr(d);
 Edit2->Text = FloatToStrF(d, ffGeneral, 5, 2);

 delete bit;
}
В обоих эдитах "0.5".

Статейка в тему: Неочевидные особенности вещественных чисел
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.05.2009, 17:35   #7
CrazyXaoc
Новичок
Джуниор
 
Регистрация: 28.05.2009
Сообщений: 10
По умолчанию

Согласен - этот текст работает, спасибо интуиции, не пришлось долго искать виновника, вот эти строки после эксэпшена мешалют работать =))
/// _clear87();
/// _control87(MCW_EM,MCW_EM);
модуль float.h
осталось понять почему именно после эксэпшена, а не сразу всё так плохо
CrazyXaoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реакция на полученное значение из базы (всплывающее окно)?? на php bush007 PHP 4 30.05.2009 21:10
StrToFloat и FloatToStr bles Помощь студентам 5 30.01.2008 22:27
Странная реакция drknn Помощь студентам 2 02.09.2007 15:51
Реакция IdTCPClient OrdJONY Работа с сетью в Delphi 3 30.08.2007 10:16
Реакция на сочетание клавишь micaell Win Api 3 20.04.2007 02:13