Страница: 1 |
Страница: 1 |
Вопрос: CSng() и региональные настройки
Добавлено: 30.10.07 11:11
Автор вопроса: NaeR | ICQ: 304499348
Возникла проблема при преобразовнии строки в число.
Есть программа клиент базы данных, она оттуда тянет числа в текстовом формате, где разделитель точка (.). А в региональных настройках клиентов есстественно запятая. И при преобразовании вываливается ошибка. Подскажите как обойти это ограничение, или как стандартно преобразовать строку?
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 30.10.07 15:03
может, так?
Dim sngVal As Single
strVal = "8.9"
sngVal = CSng(Replace$(strVal, ".", ",")
Номер ответа: 2
Автор ответа:
NaeR
ICQ: 304499348
Вопросов: 2
Ответов: 4
Профиль | | #2
Добавлено: 30.10.07 17:02
Спасибо!
Просто я в VB не силён, а чужой проект надо трансформировать под сегодняшние нужды.
Номер ответа: 3
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #3
Добавлено: 30.10.07 19:11
а если у клиента будет точка всё-таки?)
Номер ответа: 4
Автор ответа:
NaeR
ICQ: 304499348
Вопросов: 2
Ответов: 4
Профиль | | #4
Добавлено: 30.10.07 19:39
Всмысле точка в региональных настройках? Тогда наверно надо будет узнавать что именно у клиента, на то и менять...
Если знаешь как подскажи...
Номер ответа: 5
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #5
Добавлено: 30.10.07 22:23
Private Const LOCALE_SDECIMAL = &HE
Private Const LOCALE_USER_DEFAULT = &H400
Private Function GetSeparator() As String
Dim Buffer As String, Ret As String
Buffer = String$(256, 0)
Ret = GetLocaleInfo(LOCALE_USER_DEFAULT, OCALE_SDECIMAL, Buffer, Len(Buffer))
If Ret > 0 Then
GetInfo = Left$(Buffer, Ret - 1)
Else
GetInfo = ""
End If
End Function
Либо вручную читаешь
HKEY_CURRENT_USER\Control Panel\International значение sDecimal
Номер ответа: 6
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #6
Добавлено: 30.10.07 22:24
ой.... ошибка.... поправка.
Private Const LOCALE_SDECIMAL = &HE
Private Const LOCALE_USER_DEFAULT = &H400
Private Function GetSeparator() As String
Dim Buffer As String, Ret As String
Buffer = String$(256, 0)
Ret = GetLocaleInfo(LOCALE_USER_DEFAULT, OCALE_SDECIMAL, Buffer, Len(Buffer))
If Ret > 0 Then
GetSeparator = Left$(Buffer, Ret - 1)
Else
GetSeparator = ""
End If
End Function
Номер ответа: 7
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #7
Добавлено: 01.11.07 08:47
нды... все делается гораздо проще
Номер ответа: 8
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #8
Добавлено: 01.11.07 09:57
хм.... а я как только с Format ни извращался, тоже пытался получить Бум знать, спасибо.
Номер ответа: 9
Автор ответа:
Иван
Вопросов: 34
Ответов: 53
Web-сайт:
Профиль | | #9
Добавлено: 06.11.07 14:47
Вообще-то, смотря что Вы собираетесь делать с числом, полученным из ЧИСЛОВОГО поля базы данных.
Если производить дальнейшие вычисления, то нужно сохранить точку.
Если же вывести в текст-боксе, то я обычно в таких случаях использую функцию Replace(CStr(myValue), ".", ","
-- где myValue — числовое значение, а вместо "," можно использовать десятичный разделитель региональных стандартов, прочитанный одним из способов, указанных в предыдущих постах.
Если же в базе данных числа хранятся в ТЕКСТОВОМ формате (хотя не понятно, зачем нужно так усложнять себе жизнь), то для выполнения вычислений преобразуйте текст в число с помощью функции Val(), а для вывода значений в текст-боксе соответственно: Replace(myValue, ".", ","
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 06.11.07 15:33
Нужно использовать InvariantCulture
Номер ответа: 11
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #11
Добавлено: 06.11.07 15:51
Нужно беречь здоровье — не нужно программировать.
Номер ответа: 12
Автор ответа:
gvozd
Разработчик Offline Client
Вопросов: 164
Ответов: 1317
Web-сайт:
Профиль | | #12
Добавлено: 06.11.07 20:11
shuffle, золотые слова!
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 08.11.07 18:21
Ну да. А меня программирование отвлекает от пива. Как мне быть?
Номер ответа: 14
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #14
Добавлено: 11.11.07 00:41
Как, как... Напиться пива и сесть программировать!