Страница: 1 |
Проблема такова. На своем компе сделал прогу. есть там цифра в таком формате: 5.5 Разделитель - точка. Запускаю эту прогу на другом компе - пишет Type mismatch. Долго мучился и потом выяснилось что там понимается формат цифры с запятой в качестве разделителя. 5,5 Сталкивался ли кто с этим? И что куда надо проинсталлировать, чтоб все работало? спасибо за внимание.
Насколько я помню, в код VB разделитель всегда точка. Где у тебя там цифра 5.5 находится-то? Если ее вводит пользователь, например в TextBox, то надо проверять примерно так: Dim str As String, dbl As Double str = Trim(Replace(Text1.Text, ",", ".")) If IsNumeric(str) Then dbl = CDbl(str) Else MsgBox "Вы ввели не число!", vbExclamation Text1.SetFocus Exit Sub End If Короче уточни задачу. З.Ы. Менять разделитель для всей системы считаю неправильным, но если хочешь, то в панели управления есть региональные настройки. Тут все дело в региональных установках, у всех они разные , там то и устанавливаетс какой у тебя будет разделитель , лучший выход из этого пложения всегда в коде использовать какой то один формат а при вводе внешних данных его всегда конвертировать, так же как и при выводе. Так бадежнее. Такие же проблемы бывают и с датой, кстати решаются тем же способом. Не зависимо от региональных установок некоторые функции преобразования не воспринимаю точку в качестве разделителя, поэтому советую везде использовать запятую. Как это всегда использовать запятую. На моём родном компе запятая даёт несовпадение типов. Я вроде про это уж говорил. Уточняю вопрос. Ввода с клавы у меня нету. Цифру ввожу из текстового файла. Там всегда разделитель - точка. Цифра сначала вводится как строка, а потом преобразую в Single. И вот на моём компе допустимым разделителем может быть только точка, а на другом только запятая. И как это сделать, чтоб всегда один формат был? Я компилирую на своём компе *.exe - работает. Переписываю на другой комп. Этот же *.exe сообщает об ошибке. Если заменить точку на запятую - не работает у меня, зато на другом компе все хорошо. Быть может каким-то образом можно региональные настройки в программе отслеживать и соответственно заменять точки и запятые? Что-то вы какую-то ерунду здесь городите. Вне зависимости от того, что стоит в региональных настройках "." или ",", VB работает внутри себя только с точкой. Эта настройка влияет только на отображение числа. Таким образом перед конвертацией надо поменять запятые, если есть на точки: Dim str As String, sng As Single str = "1,5" str = Replace(str, ",", ".") sng = CSng(str) "1,5" - это то, что ты прочитал из файла. Если там будет 1.5 все будет также правильно. Или я в чем-то не прав? Страница: 1 |
Вопрос: Несовпадение типов.
Добавлено: 17.02.03 13:50
Автор вопроса: kans
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Alex3
ICQ: 9481061
Вопросов: 18
Ответов: 132
Профиль | | #1
Добавлено: 17.02.03 17:39
Номер ответа: 2
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #2
Добавлено: 17.02.03 23:08
Номер ответа: 3
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #3
Добавлено: 18.02.03 06:09
Номер ответа: 4
Автор ответа:
kans
Вопросов: 4
Ответов: 7
Профиль | | #4
Добавлено: 18.02.03 08:57
Номер ответа: 5
Автор ответа:
Илья
ICQ: 251647191
Вопросов: 37
Ответов: 167
Web-сайт:
Профиль | | #5
Добавлено: 18.02.03 12:17
А ты используй API и при ошибке пиши мсжбокс и открывай настройки региональных стандартов.
Номер ответа: 6
Автор ответа:
Alex3
ICQ: 9481061
Вопросов: 18
Ответов: 132
Профиль | | #6
Добавлено: 18.02.03 13:02
Номер ответа: 7
Автор ответа:
Silver Flamingo
ICQ: 116970115
Вопросов: 27
Ответов: 49
Профиль | | #7
Добавлено: 18.02.03 13:13
Если тебе надо передать переменной цифровое значение с точкой тогда фоспользуйся значением Currency, но не во всех случаях спасает, ещё также завит от региональных настроек (Денежная единица).
Номер ответа: 8
Автор ответа:
kans
Вопросов: 4
Ответов: 7
Профиль | | #8
Добавлено: 18.02.03 14:30
Изменение региональных настроек действительно помогает. В этом случае, на мой взгляд, проще всего в программе проверять ветку реестра с установками. Тока вот... Подскажите ламеру какой командой это делается, пожалуйста. GetSetting не получается, ибо тока по ветке VB лазит, как я понял. А других команд в справочнике здешнем я не обнаружил. Это, небось, надо чего-то подключать?
Номер ответа: 9
Автор ответа:
kans
Вопросов: 4
Ответов: 7
Профиль | | #9
Добавлено: 19.02.03 08:54
Спасибо за ответы. Очень помогли. Все заработало.