Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Несовпадение типов. Добавлено: 17.02.03 13:50  

Автор вопроса:  kans

Проблема такова. На своем компе сделал прогу. есть там цифра в таком формате: 5.5 Разделитель - точка.

Запускаю эту прогу на другом компе - пишет Type mismatch. Долго мучился и потом выяснилось что там понимается формат цифры с запятой в качестве разделителя. 5,5

Сталкивался ли кто с этим? И что куда надо проинсталлировать, чтоб все работало?

спасибо за внимание.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #1 Добавлено: 17.02.03 17:39

Насколько я помню, в код 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

Короче уточни задачу.

З.Ы. Менять разделитель для всей системы считаю неправильным, но если хочешь, то в панели управления есть региональные настройки.

Ответить

Номер ответа: 2
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #2 Добавлено: 17.02.03 23:08

Тут все дело в региональных установках, у всех они разные , там то и устанавливаетс какой у тебя будет разделитель , лучший выход из этого пложения всегда в коде использовать какой то один формат а при вводе внешних данных его всегда конвертировать, так же как  и при выводе. Так бадежнее. Такие же проблемы бывают и с датой, кстати решаются тем же способом.

Ответить

Номер ответа: 3
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #3
Добавлено: 18.02.03 06:09

Не зависимо от региональных установок некоторые функции преобразования не воспринимаю точку в качестве разделителя, поэтому советую везде использовать запятую.

Ответить

Номер ответа: 4
Автор ответа:
 kans



Вопросов: 4
Ответов: 7
 Профиль | | #4 Добавлено: 18.02.03 08:57

Как это всегда использовать запятую. На моём родном компе запятая даёт несовпадение типов. Я вроде про это уж говорил.

Уточняю вопрос. Ввода с клавы у меня нету. Цифру ввожу из текстового файла. Там всегда разделитель - точка. Цифра сначала вводится как строка, а потом преобразую в Single. И вот на моём компе допустимым разделителем может быть только точка, а на другом только запятая. И как это сделать, чтоб всегда один формат был? Я компилирую на своём компе *.exe - работает. Переписываю на другой комп. Этот же *.exe сообщает об ошибке. Если заменить точку на запятую - не работает у меня, зато на другом компе все хорошо. Быть может каким-то образом можно региональные настройки в программе отслеживать и соответственно заменять точки и запятые?

Ответить

Номер ответа: 5
Автор ответа:
 Илья



ICQ: 251647191 

Вопросов: 37
Ответов: 167
 Web-сайт: www.lirc.narod.ru
 Профиль | | #5
Добавлено: 18.02.03 12:17
А ты используй API и при ошибке пиши мсжбокс и открывай настройки региональных стандартов.

Ответить

Номер ответа: 6
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #6 Добавлено: 18.02.03 13:02

Что-то вы какую-то ерунду здесь городите. Вне зависимости от того, что стоит в региональных настройках "." или ",", VB работает внутри себя только с точкой. Эта настройка влияет только на отображение числа. Таким образом перед конвертацией надо поменять запятые, если есть на точки:

Dim str As String, sng As Single

str = "1,5"

str = Replace(str, ",", ".")

sng = CSng(str)

"1,5" - это то, что ты прочитал из файла. Если там будет 1.5 все будет также правильно.

Или я в чем-то не прав?

Ответить

Номер ответа: 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
Спасибо за ответы. Очень помогли. Все заработало.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам