![]() |
|
|
![]()
|
|
| Ruka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
В программе данные считываются с прибора по DDE, а потом переводятся из текста в double. Если при этом в какой-то момент текст - не число, программа вылетает. Как это обойти? Double нужен, чтобы потом сравнивать.
Помогите, пожалуйста. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Проверяй, перед тем как переводить в Double. А лучше обрабатывай исключения:
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
либо StrToFloatDef
|
|||
|
||||
| Ruka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
StrToFloat не подходит, т.к. текст - AnsiString. Я пишу так: double ID1; try { ID1=DdeClientItem1->Text.ToDouble(); } catch ( ... ) { ID1=0.0; } Программа вылетает на операторе ID1=DdeClientItem1->Text.ToDouble(). Появляется сообщение об ошибке: … exception class EConvertError with message “is not a valid floating point value”. При этом значение DdeClientItem1->Text равно E2195 Cannot evaluate function call. Отслеживать именно это значение не хотелось бы - а вдруг появятся другие? |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Плюс посмотри на глобальные разделители. А также ещё есть глобальные переменные среды в которых хранится символ разделитель чичел с плавающей точкой (как они называются не помню) |
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Так будет происходить при запуске из-под Билдера. При обычном запуске exe-шника будет нормально обрабатываться исключение по ветке catch(...).
StrToFloat и сделан для AnsiString. А ещё лучше используй StrToFloatDef как посоветовал Dumb - меньше кода будет.
Это не значение, а сообщение Билдера о том, что он не может отобразить это значение Добавлено через 1 минуту и 44 секунды Он называтся DecimalSeparator. Можно например написать для определённости
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| Ruka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
При нормальном запуске exe-файла. Просто выскакивает очень много сообщений об ошибке. В нормальный режим не возвращается.
И, пожалуйста, поясните, куда DecimalSeparator поставить? В try ? Это сообщение отредактировал(а) Ruka - 21.5.2007, 11:02 |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Ну так у тебя наверно всё это в цикле? Ruka, тебе сказали уже всё, чтобы ты смог преобразовать строку к числу. Если хочешь чтобы тебе сообщили ещё что-то, приведи больше инфы: код приведи или опиши подробней ситуацию Добавлено @ 11:06 Я думаю дело не в DecimalSeparator Это сообщение отредактировал(а) ksili - 22.5.2007, 04:57 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| sp75 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 17.5.2007 Репутация: 1 Всего: 1 |
Велосипед уже изобретен : TryStrToFloat(const AnsiString S, double &Value); TryStrToFloat(const AnsiString S, float &Value); Пример: AnsiString a = "3,15"; double Value; if( TryStrToFloat(a, Value) ) ShowMessage(FloatToStr( Value ) +"- Это double) ; else ShowMessage(a+" Не double") ; Это сообщение отредактировал(а) sp75 - 21.5.2007, 15:50 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |