Я новичок в Delphi XE5 (входит в состав RAD Studio Embarcadero) и использует функцию StrToFloat в проекте VCL Forms, предназначенном для создания простого калькулятора.'' Недействительный идентификатор (Delphi XE5)
Код для отображения текста пользователю хорошо работает, но у меня возникли проблемы с его извлечением таким образом, чтобы калькулятор действительно выполнял вычисления. Средством, на котором я остановился, является отображение кода пользователю в Tedit и сохранение кода, который будет выполняться в Tmemo. Нажатие кнопок на калькуляторе сохраняет номера для обоих, и нажатие оператора (символы для добавления, вычитания, экспоненты, умножения и деления) запускает новую строку в заметке. Таким образом, каждый номер находится в отдельной строке, и каждый оператор находится на своей собственной линии.
Затем я хочу извлечь числа относительно операторов, итерации по строкам памятки. Для 3^4
, вы увидите ...
3
^
4
... в TMemo.
Я хочу, чтобы найти^знак с индексом линии 1 (строки начинаются с индекса 0, верно?), И хранить 3
в base
переменной логикой, что если ^
является lines[1]
, то 3
является lines[1-1]
, или lines[0]
, и хранить 4
в переменной exponent
. Обе переменные были бы расширены по типу. Это код, который я создал, чтобы сделать это ...
procedure TForm1.btnEqualsClick(Sender: TObject);
var
i: Integer;
base: extended;
exponent: extended;
result: extended;
begin
{This For loop looks for the exponentiation operator (^) in memCurrentEntry. If
it's found, it then solves the equation.}
for i := Low(memCurrentEntry.Lines.Text.Length) to High(memCurrentEntry.Lines.Text.Length) do
if AnsiContainsStr(memCurrentEntry.Lines.Text, '^') then
begin
base := StrToFloat(memCurrentEntry.Lines[ansipos('^', memCurrentEntry.Lines.Text)-1]);
exponent := StrToFloat(memCurrentEntry.Lines[ansiPos('^', memCurrentEntry.Lines.Text)+2]);
result := power(base, exponent);
end;
Когда я бегу калькулятор, цифры отображаются правильно, но когда я нажал на кнопку равно для запуска кода выше, я получаю сообщение Project Calculator_u.exe повышен класс исключений EConvertError с сообщением '' 'не является допустимым значением с плавающей запятой'.
Я знаю, что функция StrToFloat пытается преобразовать нулевой символ или что-то (How do I identify what code is generating " '' is not a valid floating point value" error dialogue box), но что мне делать, чтобы исправить это?
Ниже приведен код для каждой кнопки - цифра (0, 1, 2, 3 и т.д.) изменения, но в остальном то же самое для каждого из них ...
procedure TForm1.btn0Click(Sender: TObject);
begin
//Adds the digit 0 to the end of the current number in memCurrentEntry
memCurrentEntry.SelStart := Length(memCurrentEntry.Text);
memCurrentEntry.Lines.Text := Copy(memCurrentEntry.Lines.Text,1,
memCurrentEntry.SelStart)+'0'+ Copy(memCurrentEntry.Lines.Text,
memCurrentEntry.SelStart+1,Length(memCurrentEntry.Lines.Text)
- memCurrentEntry.SelStart);
//Adds the digit 0 to the end of the current number in edtCurrentEntry
edtcurrententry.Text := edtcurrententry.Text + '0';
end;
я могу отправьте полный файл блока по запросу.
Не могли бы вы исправить заголовок вопроса. Q не имеет ничего общего с * '' Не является допустимым идентификатором * –
Прежде всего, Добро пожаловать в сообщество Delphi! Здесь много информации, которая не помогает идентифицировать вопрос. Одна из проблем с этим кодом заключается в том, что он предполагает, что a^всегда будет иметь предыдущее число, поэтому ответ Дэвида на использование TryStrToFloat будет решать эту конкретную проблему. – skamradt