Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

Подобие функции 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.053 c
8-1163420624
SergeyProtopopov
2006-11-13 15:23
2007.08.19
Реализация свойства stretch в компоненте TImage (D7)


2-1185025167
CatAlone
2007-07-21 17:39
2007.08.19
Drag and drop и extractfilename


6-1167843193
nes_
2007-01-03 19:53
2007.08.19
webbrowser + HTTP_USER_AGENT (MSIE 6.0; Windows NT 5.1)


2-1184856530
kolyann..
2007-07-19 18:48
2007.08.19
забыл функцию


15-1185023615
Коляяя
2007-07-21 17:13
2007.08.19
css





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский