Вниз
Скачать: CL | DM;

Подобие функции StrToFloat. Помогите!   Найти похожие ветки 

← →
Василий   (2007-06-12 09:16) [0]

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


← →
G_M_S ©   (2007-06-12 09:31) [1]

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


← →
Юрий Зотов ©   (2007-06-12 09:56) [2]

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 10:15) [3]


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

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


← →
Kolan ©   (2007-06-12 10:19) [4]

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

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


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


← →
Юрий Зотов ©   (2007-06-12 10:27) [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


← →
Юрий Зотов ©   (2007-06-12 10:28) [6]


> для FloatToStr

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


← →
G_M_S ©   (2007-06-12 12:14) [7]


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

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

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

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


← →
Юрий Зотов ©   (2007-06-12 12:42) [8]

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

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

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

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


← →
G_M_S ©   (2007-06-12 13:06) [9]


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

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

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
15-1184868247
oxffff
2007-07-19 22:04
2007.08.19
БАГ компилятора в конструкторе с Open Array


15-1184297566
макк
2007-07-13 07:32
2007.08.19
Как узнать откуда территориально такой-то ай-пи адрес?


15-1185033758
@!!ex
2007-07-21 20:02
2007.08.19
Windows 2000 не находит драйвер.


2-1185511723
Индеец
2007-07-27 08:48
2007.08.19
Создание базы данных


15-1185146830
Ильюн
2007-07-23 03:27
2007.08.19
метод прогнозирования (АРПСС, arima)




   Наверх