![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подобие функции 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 в какой-то степени. В чем трабла?