Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > StrToFloat


Автор: HighTemplar 26.5.2005, 14:03
Необходимо извлечь из Edit1 значение, введённое пользователем, в числовую t. Пишу:
t:=strtofloat(Edit1.text);

При этом прога компилится, но сразу вслед за этим выдаётся окно ошибки класса EConvertError.
В поле var описана типа Extended:
t:Extended;

пробовал типа Real, но то самое. Integer не подходит, нужна дробная часть. В чём же ошибка?

Автор: ~FoX~ 26.5.2005, 14:10
Делитель дробной части должен быть правильный при вводе числа в Edit1.

Автор: Snowy 26.5.2005, 14:10
Используй TryStrToFloat
Иначе будешь ловить ошибку, tcpb в поле пустота или нечисловое значение.

Автор: chaos 26.5.2005, 14:17
или просто запрети вводить точку,
вот тебе тривиальный пример для ввода чисел
Код

...
if not key in [0..9, ',' , '-', #8] then
  key:= #0;
...

Автор: Snowy 26.5.2005, 16:39
Цитата(chaos @ 26.5.2005, 14:17)
или просто запрети вводить точку,

Не серъезно.
Во-первых я могу вставить текст.
Во-вторых на пустоту все равно будет ругаться.
В-третьих у меня в системе может быть именно точка, а не запяточка.
В-четвертых я могу ввести '11,22,33,44' - проглотит, а глюк будет.
Нет, тут нужно просто аккуратный перевод делать.
TryStrToFloat самое то.

Автор: gepard 27.5.2005, 07:09
Цитата(HighTemplar @ 26.5.2005, 14:03)

При этом прога компилится, но сразу вслед за этим выдаётся окно ошибки класса EConvertError.
В поле var описана типа Extended:
t:Extended;

пробовал типа Real, но то самое. Integer не подходит, нужна дробная часть. В чём же ошибка?

Число в edit1 должно писаться через ",", а не через ".". То бишь:
Цитата

144,78456

А не
Цитата

144.78456

Автор: Snowy 27.5.2005, 09:05
Цитата(gepard @ 27.5.2005, 07:09)
Число в edit1 должно писаться через ",", а не через ".". То бишь:

Сказки.
Разделитель может быть любым знаков, в зависимости от того, что установлено в системе.
У меня, например, как раз точка, а не запяточка.
Я как-то ради эксперимента ставил вообще текстовые разделители.

Автор: ~FoX~ 27.5.2005, 09:16
Snowy прав......разделителем может быть и буква зю в корейской кодировке, не вопрос....
Так, что либо TryStrToFloat, либо перед исполнением вкалатить проверку на корректность. Т.е. если пусти, если разделитель не тот, если разделителей несколько, если число превосходит максимальное количество знаков и т.д. А можно вывернуться и написать компонент наследника отSpinEdit-a например для работы с числами типа Extendet, но ИМХО овчинка выделки не стоит. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)