|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как переключить разделитель целой и дробной части?
Саратов
Регистрация: 17.10.2008
Сообщений: 426
|
||
Просмотров: 13902
|
|
||||
Регистрация: 17.10.2008
Саратов
Сообщений: 426
|
Елпанов Евгений, Вы еще не ушли. Я перегрузился. Не помогло.
Т.е. нет, разделитель теперь запятая, все путем, но. Опишу ситуацию подробней: В VBA-шной форме есть TextBox для ввода массы. После ввода проверка на число - IsNumeric(TextBoxMassa). Набираю число с нумпада. И ,собака, точку пишет. Ну а проверка по IsNumeric дает false. Ну не принудительно же ставить запятую. Причем это только на моем компе задрипанном замечается. У других запятая вводится с нумпада. У меня AMD Athlon 1100. У остальны Пеньки III и IV. Может в этом дело? |
|||
![]() |
|
||||
а в панели управления, ты где менял?
разделитель целой и дробной части в разделе числа или в разделе денежная единица? Кстати, чтоб лучше медитировалось, подскажи, какая у тебя винда, какой язык по умолчанию, сколько установлено языков и какие, какие права на компьютере. |
||||
![]() |
|
||||
Регистрация: 17.10.2008
Саратов
Сообщений: 426
|
Цитата:
Менял как обычно Пуск-Панель управл. - Язык и Стандарты. А в экселе просто в любую ячейку число с запятой вбивается с нумпада. Эксперимент: 0,12 - Вот тут с нумпада "," ) А блин, у себя в проге - точка вылазиет (. Цитата:
Windows XP Professional 2002, SP2. Языки: англ и рус как у всех. Англ по умолчанию. Права юзера, но с большими возможностями. В смысле у нас нет никаких запретов/ограничений (как например в комп.клубах). И что тут можно раскурить? |
|||
![]() |
|
||||
еще одно видение (даже не знаю, как это по другому назвать, я даже не знаю, в каком городе ты живешь)...
![]() Может у тебя все нормально? Зайди в эксель, Сервис - Параметры - Международные и посмотри, стоит ли у тебя галка - использовать системные разделители... Ну и само собой настройки разделителей в офисе... |
||||
![]() |
|
||||
Регистрация: 17.10.2008
Саратов
Сообщений: 426
|
Цитата:
Цитата:
Чет в 2007 я не нашел (. |
|||
![]() |
|
||||
Цитата:
А вообще, это шалит обработчик, те. подмена происходит либо во время проверки на число, либо самим контролом. Других предположений нету... |
||||
![]() |
|
||||
Регистрация: 17.10.2008
Саратов
Сообщений: 426
|
Елпанов Евгений, ну а чем может грозить принудительная замена точки на зпт менять.
Допустим так: Код:
А и еще какой функцией переключается разделитель в WinAPI? Или что-то типа Application.International(xlDecimalSeparator) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Разделитель целой и дробной части хранится в реестре, насколько мне помнится.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
В своей программе совсем не обязательно, чтобы автоматически учитывались региональные настройки. Это зависит от используемых компонентов и мозгов программиста. А с мозгами "в стране напряженка". Поэтому программисты часто уверены, что у всех DECIMAL_SEPARATOR должен быть установлен, как и у них.
В хороших программах это обязательно учитывается. В момент ввода данных и в моменты преобразования для вычислений и для вывода на экран. Хороший компонент также не даст ввести неправильный разделитель в момент ввода числа. Это у хорошего компонета "в мозги зашито". Если нет хорошего компонента, должны включаться мозги программиста для вставки в обработчик событий дополнительного кода по преобразованию данных. В реестр лазить не надо, необходимо обращаться к функциям API, так как место хранения сепаратора может изменяться. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Думается мне, что дело тут не в мозгах, а всего лишь в отсутствии опыта.
А все, что подобает сделать опытному старшему товарищу - это привести короткий исчерпывающий пример кода, в котором грамотно "разруливается" подобная ситуация. Многим пригодилось бы (и мне в том числе).
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Например, так (на Pascal):
Код:
DecimalSeparator - глобальная переменная Windows. Она временно переопределяется на точку, получаем правильное число штатной функцией. Возможно и противоположное применение, например Код:
Для вывода данных на печать используются подобные функции, только заменяющие разделитель на нужный. Хорошо, если в программе есть возможность для пользователя настроить, что использовать - "точку", "запятую" или "из региональных настроек". Тогда в могло бы быть наподобие Код:
В каждую программу это пихать не надо, это может быть в одном модуле, а в программе, вместо StrToFloat использовать MyStrToFloat. |
|||
![]() |
|
||||
Регистрация: 17.10.2008
Саратов
Сообщений: 426
|
Невъехал как #24 применить в "гребаном" VBA.
Вот помогло это: Замена точки или запятой в строке на разделитель установленный в реестре. Код:
Последний раз редактировалось Baldares, 21.11.2008 в 12:05. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
У путёвого админа непременно стоит запрет на запуск Windows Script Host - распахнутых настежь ворот для атак на компьютер. Зачем из-за такой ерунды всё это запускать?
Одно из достоинств (самое большое) этого "гребаного" (по твоему выражению) в том, что из него можно вызывать функции обычных dll, в том числе WinAPI. Ну уж и реестр-то наверняка напрямую читать умеет, без всяких шеллов. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Что умеет без Shell - это да. Но "напрямую" - это вряд ли
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |
БРЕД СИВОЙ КОБЫЛЫ | Kryaker | Разное | 1876 | 29.12.2006 23:41 |