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

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

Подобие функции StrToFloat. Помогите! [D7, WinXP]


Василий ©   (2007-06-12 09:16:00) 

Здравствуйте. Помогите пожалуйста. Есть переменная типа string s, хранящая следующую запись формы числа:
s='1.588069080798e+000'. Как переменной типа double a присвоить значение, которое храниться в переменной s?
Наверняка должна быть спец функция типа StrToFloat, которая не работает в моём случае.


G_M_S   (2007-06-12 13:06:00) [1]


> И правильно вызывает - превышен допустимый диапазое экспоненты.

Ну да. А при мануальном переводе можно эту ситуацию учесть.

Кроме того, и при неправильном делимитере, и при превышении диапазона эксепшен одинаковый, а мануально можно генерить эксепшены разных типов на разные ошибки.


Юрий Зотов   (2007-06-12 12:42:00) [2]

> G_M_S ©   (12.06.07 12:14) [7]

> Смотря что понимать под "длинными"...
То же, что и всегда - количество знаков.

> Вот такая строка вызывает эксепшен...
И правильно вызывает - превышен допустимый диапазое экспоненты.

> так же пробел в любом месте вызывает эксепшен, равно как и русская "Е"
Странно, да? И с чего бы это...


G_M_S   (2007-06-12 12:14:00) [3]


> Подозреваю, что для FloatToStr можно вобще задавать сколь
> угодно длинные мантиссы и экспоненты

Смотря что понимать под "длинными"... Вот такая строка вызывает эксепшен:

r := StrToFloat('1,576234578233245235465237535E+10000');

ЗЫ: так же пробел в любом месте вызывает эксепшен, равно как и русская "Е" :)))


Юрий Зотов   (2007-06-12 10:28:00) [4]


> для FloatToStr

Сорри, для StrToFloat, конечно.


Юрий Зотов   (2007-06-12 10:27:00) [5]

> G_M_S ©   (12.06.07 10:15) [3]

У него в мантиссе 13 цифр. Тип double справляется с 15-16. Подозреваю, что для FloatToStr можно вобще задавать сколь угодно длинные мантиссы и экспоненты, с лишними цифрами она должна справиться сама.

procedure TForm1.FormCreate(Sender: TObject);
var
 d: double;
begin
 d := StrToFloat('1.5880690807981588069080798e+00000000000001');
 Caption := FloatToStr(d);
end;

И тоже все прекрасно работает. Число, как и следовало ожидать, округляется до 15.8806908079816


Kolan   (2007-06-12 10:19:00) [6]

В BDS2006 все работает:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
d: double;
begin
d := StrToFloat('1 ,588069080798e+000');
Caption := FloatToStr(d);
end;


Имхо единственное что не так — DecimalSeparator.


G_M_S   (2007-06-12 10:15:00) [7]


> Проверьте DecimalSeparator.

У него может быть слишком много цифр после разделителя - у меня в TD2006 при этом тоже эксепшен вылазит.


Юрий Зотов   (2007-06-12 09:56:00) [8]

procedure TForm1.FormCreate(Sender: TObject);
var
 d: double;
begin
 d := StrToFloat('1.588069080798e+000');
 Caption := FloatToStr(d);
end;

Все прекрасно работает. Проверьте DecimalSeparator.


G_M_S   (2007-06-12 09:31:00) [9]

Да вроде нет такой... А в чем проблема - запись разобрать не сложно, берешь число и умножаешь на 10 в какой-то степени. В чем трабла?


Наверх

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