Текущий архив: 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.46 MB
Время: 0.046 c