Страница: 1 |
Страница: 1 |
Вопрос: Операция суммирования чисел в текстовых полях
Добавлено: 25.02.09 20:11
Автор вопроса: Яр
Доброго времени всем!
Прошу помощи в простом, казалось бы, вопросе.
На форме есть три тестовых поля: Text1, Text2, Text3 и кнопка. Код кнопки:
1. Если вводить выражение: 7,7=7*1,1 (разделяя целую и дробную часть чисел запятыми), то выдает сообщение "ОК". Если ввести то же выражение, но с разделителем - точкой, то выдает "NO".
2. Если далее в те же текстовые поля ввести выражение: 8,4=7*1,2 (разделитель - запятая), то выдает "NO". А если использовать точку, то выдает "ОК".
В чем дело? Подскажите, пожалуйста. Я себе уже голову сломал.
Спасибо!!!
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Dim22
Вопросов: 5
Ответов: 16
Профиль | | #1
Добавлено: 25.02.09 20:58
В своих прогах я делаю следующее :
в текстовые поля разрешаю вводить пользователям равно как точку, так и запятую, но потом на текстовое поле ставлю обработчик завершения редактирования текстового поля, в котором все запятые заменяются на точки и проверяется число это или нет. После чего Val(string) (или в vbnet - single.parse(string)) без проблем превратит строку в число. Кстати, рекомендуют еще округлять результат до какого-нибудь знака после запятой, т.к. выражение 7*1.1 будет равно не 7.7, а 7.7000000000001, а 7*1.2 не 8.4, а 8.3999999999999999.
Номер ответа: 2
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #2
Добавлено: 25.02.09 21:32
Причина фокуса банальна - Val не признает "," как разделитель целой и дробной части ("." ему подавай!), но и не выдаст ошибки, если аргумент вообще не похож на число - просто вернет 0. В данном случае Val("7,7"=7, т.к. все, что после запятой, по его мнению, числом не является. Соответственно 7=7*1, а 8<>7*1
Номер ответа: 3
Автор ответа:
Яр
Вопросов: 18
Ответов: 24
Профиль | | #3
Добавлено: 25.02.09 21:37
Поборол заразу!
Вдруг кому-то понадобится. Сравнивать надо не в числовом, а в строковом формате. Вот код для кнопки:
Всем спасибо!!!
Номер ответа: 4
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #4
Добавлено: 25.02.09 21:43
Яр вот чуть переделал твой пример, чтоб ты понял в чём подвох в твоём коде, написал на ВБ нэт - под ВБ6 дкмаю перепишешь.
Функция Val(Value) служит для преобразования аргумента в числовой тип данных. Функция Val прекращает чтение строки на первом символе, который она не может распознать в качестве части числа.
Номер ответа: 5
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #5
Добавлено: 25.02.09 21:44
Да ни фига подобного! Если не поменяешь в текст1 "." на "," , а в остальных наоборот, рано или поздно (скорее рано) снова перекосит!
Номер ответа: 6
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #6
Добавлено: 25.02.09 21:45
Вот е мае ток прочёл, начал писать, обновил а уже 2 ответа есть
Номер ответа: 7
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #7
Добавлено: 25.02.09 21:46
Прошу прощения, я отвечал на 3 ответ!
Номер ответа: 8
Автор ответа:
Яр
Вопросов: 18
Ответов: 24
Профиль | | #8
Добавлено: 25.02.09 21:58
Прошу прощения, что не уточнил: во всех текст1, 2 и 3 заставил принудительно менять "," на ".".