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

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

FloatToStr


grisme ©   (2006-08-06 05:44:00) 

Как заставить сабжевую функцию съесть число с дробной точкой, т.к. ей подавай с запятой?..:0)


umbra   (2006-08-07 10:09:00) [1]

подобная ошибка "из ниоткуда" (Invalid Floating Point Operation) случается и в делфи при работе в отладчике. Если убрать ближайшую к точке возникновения ошибки точку прерывания, то она исчезнет как по волшебству.


Rater1   (2006-08-07 08:17:00) [2]

Может комп перегрузить - бывает чего-то кривеет и дельфи начинает ругаться где не попадя... (было один раз такое)...


palva   (2006-08-06 22:45:00) [3]

grisme ©   (06.08.06 12:11) [7]
Возможно, при вычитании двух очень маленьких близких чисел произошла потеря точности (underflower) ?
Нельзя ли получить более подробную диагностику? и сами числа неплохо бы привести.


grisme   (2006-08-06 12:11:00) [4]

почему при сравнении двух переменных(в while или if) с типом double, возникает исключение Invalid Floating Operation(на всякий случай, это на C++ Builder)?:0(


Юрий Зотов   (2006-08-06 11:21:00) [5]

function Str2Float(const S: string): extended;
begin
 Result := StrToFloat(StringReplace(StringReplace(S, '.', DecimalSeparator, []), ',', DecimalSeparator, []))
end;


grisme   (2006-08-06 11:13:00) [6]

Просто на коде в билдере вылазят странного рода ошибки. Сначала билдер ругался на перевод double числа в строку и его вывод, хотя несколько моментов назад вывел целую тонну таким же образом переведенных чисел.) Теперь указывает мне на while (условие) { и сообщает, invalid floating operation.

Зы.в условии только сравнение, причем при отладке оно дает истину..:0) и тут же ошибка...спасибо за ответы по DecimalSeparator'у, я тоже пробовал преобразовывать до того, как запостил в этот раздел, видимо причина не в этом..:0)


Loginov Dmitry   (2006-08-06 10:35:00) [7]

> Как заставить сабжевую функцию съесть число с дробной точкой,
> т.к. ей подавай с запятой?..:


Вы случаем ниче не путаете? Функция FloatToStr просто преобразует вещественное число в строковое представление.
Если речь идет о функции StrToFloat, то могу предложить следующий вариант:

function StrToFloat(S: string): Extended;
var
 C: Char;
 I: Byte;
begin
 if DecimalSeparator = '.' then C := ',' else C := '.';
 I := Pos(C, S);
 if I > 0 then S[I] := DecimalSeparator;
 if not TextToFloat(PChar(S), Result, fvExtended) then
   raise Exception.CreateFmt(matInvalidFloat, [S]);
end;


SerJaNT   (2006-08-06 08:25:00) [8]


> FloatToStr числа с точками кушать просто так не станет,
> нужно точку указать в "национальных блюдах" (региональных
> настройках), либо перед тем как кормить FloatToStr, нужно
> сначала точку дать попробовать DecimalSeparator,после чего
> FloatToStr тоже станет кушать числа с точками..


одним словом, нужно сначала продегустировать. Так?


SergP   (2006-08-06 08:21:00) [9]

FloatToStr числа с точками кушать просто так не станет, нужно точку указать в "национальных блюдах" (региональных настройках), либо перед тем как кормить FloatToStr, нужно сначала точку дать попробовать DecimalSeparator,после чего FloatToStr тоже станет кушать числа с точками..

:-)


SerJaNT   (2006-08-06 07:59:00) [10]

наверное число не вкусное. поперчил, посалил?


Наверх

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