Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: 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 вся ветка

Текущий архив: 2007.08.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
4-1172557563
GrayFace
2007-02-27 09:26
2007.08.19
"Сбросить" ListView_SetColumnWidth при ViewStyle = vsList


1-1181179291
Igor_K_A
2007-06-07 05:21
2007.08.19
Обработка Bitmap двумя Thread


2-1185277654
ambhtr
2007-07-24 15:47
2007.08.19
Не понятно работает ImageList1.GetBitmap


15-1184705476
c0deRR
2007-07-18 00:51
2007.08.19
Подскажите, где можно взять базу русского спама?


2-1184672236
Iggor
2007-07-17 15:37
2007.08.19
MS SQL ADO