Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StrToFloat, StrToFloat - ошибки 
:(
    Опции темы
HighTemplar
Дата 26.5.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.3.2005

Репутация: нет
Всего: нет



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

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

пробовал типа Real, но то самое. Integer не подходит, нужна дробная часть. В чём же ошибка?
PM MAIL   Вверх
~FoX~
Дата 26.5.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Делитель дробной части должен быть правильный при вводе числа в Edit1.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Snowy
Дата 26.5.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Используй TryStrToFloat
Иначе будешь ловить ошибку, tcpb в поле пустота или нечисловое значение.
PM MAIL   Вверх
chaos
Дата 26.5.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



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

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


Это сообщение отредактировал(а) chaos - 26.5.2005, 14:18
PM WWW   Вверх
Snowy
Дата 26.5.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



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

Не серъезно.
Во-первых я могу вставить текст.
Во-вторых на пустоту все равно будет ругаться.
В-третьих у меня в системе может быть именно точка, а не запяточка.
В-четвертых я могу ввести '11,22,33,44' - проглотит, а глюк будет.
Нет, тут нужно просто аккуратный перевод делать.
TryStrToFloat самое то.
PM MAIL   Вверх
gepard
Дата 27.5.2005, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: нет
Всего: 40



Цитата(HighTemplar @ 26.5.2005, 14:03)

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

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

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

144,78456

А не
Цитата

144.78456



--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Snowy
Дата 27.5.2005, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



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

Сказки.
Разделитель может быть любым знаков, в зависимости от того, что установлено в системе.
У меня, например, как раз точка, а не запяточка.
Я как-то ради эксперимента ставил вообще текстовые разделители.
PM MAIL   Вверх
~FoX~
Дата 27.5.2005, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



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


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.