2014-12-06 17 views
5

Я использую TryStrToFloat для преобразования строки в двойные переменные. Все работает нормально, пока строка не будет выглядеть как «21e». Я получаю результат преобразования 21.TryStrToFloat преобразует неправильную строку

Мне кажется, что компилятор рассматривает «21e» как номер 21e0. Строка 21e1 дает результат 210. Когда я использую преобразование функции Val, работает лучше. String '21e' дает ошибку, но теперь '21e1' дает 210, '21e-1' дает номер 2,1 и т. Д.

Как правильно выполнить преобразование. Должен ли я обнаруживать букву «e» в тексте или какой-либо простой способ конвертировать?

ответ

8

The documentation говорит:

Использование TryStrToFloat для преобразования строки, S, к значению с плавающей точкой. S должен состоять из необязательного знака (+ или -), строки цифр с необязательной десятичной точкой и необязательной мантиссы. Мантисса состоит из «E» или «e», за которым следует необязательный знак (+ или -) и целое число. Ведущие и конечные пробелы игнорируются.

Ваш вход не удовлетворяет условиям, и поэтому его следует рассматривать как ошибку.

Вы не сказали об этом прямо, но я полагаю, что вы утверждаете, что:

TryStrToFloat('21e', val) 

возвращается True. Если это так, это ошибка, о которой следует сообщить Embarcadero. Если вам нужно обойти это, я предлагаю вам создать собственную функцию, которая обнаруживает этот случай и обрабатывает его правильно.

С другой стороны, если этот вызов функции возвращает False, функция ведет себя так, как указано, и ваша ошибка заключается в том, чтобы прочитать значение в val.

Update

Я могу подтвердить, что TryStrToFloat('21e', val) возвращается True. Я тестировал обновление XE7 1. Я представил следующий отчет об ошибке Embarcadero: https://quality.embarcadero.com/browse/RSP-9814

+2

Действительно. 'TextToFloat' (вызываемый' TryStrToFloat') возвращает 'TRUE' для' 21e'. Протестировано с помощью XE, это самый последний из них на этой машине. – JensG

+0

Спасибо @JensG, как я думаю, вы могли бы сказать, что я не смог проверить эту проблему. –