|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
|
Double.parse(): независимость от региональных настроек20.01.2012, 00:12. Показов 19815. Ответов 15
Метки нет (Все метки)
Мне нужно чтобы этот метод корректно отрабатывал на числах с разделителем целой и дробной части "." и "," . То есть, автоматически определял нужные региональные настройки. как это устроить?
1
|
|
| 20.01.2012, 00:12 | |
|
Ответы с готовыми решениями:
15
|
|
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
|
|
| 20.01.2012, 02:27 | |
|
тут однозначного ответа нет. вот вариант, к которому пришёл я:
- Parse(String, IFormatProvider) в который я передаю нужный NumberFormat, причём через весь метод считывания большого текстового файла данных и на поверхности ловлю исключения открытия файла - не удалось - меняю формат и т.д. пока не откроется. если все варианты (которых обычно 2) не отработали, то наверх улетает исключение, пойманное первым (как InnerException, естественно)
1
|
|
|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
||||||
| 20.01.2012, 03:43 [ТС] | ||||||
|
Спасибо.
Вот к чему пришел я:
1
|
||||||
|
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
|
|
| 20.01.2012, 05:44 | |
|
1
|
|
|
38 / 38 / 8
Регистрация: 29.05.2011
Сообщений: 65
|
|
| 20.01.2012, 09:07 | |
|
И правда не самый лучший способ. Например, в американской культуре число 200,000,111=200000111 (','-разделитиль групп разрядов).
Попробуйте везде использовать инвариантную культуру.
1
|
|
|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
|
| 20.01.2012, 11:12 [ТС] | |
|
Mikant, Вы могли быть привести пример вашей реализации, того что вы имеете ввиду? пожалуйста.
p.s. сомневаюсь, что мой - худший вариант)
1
|
|
|
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
|
|||||||
| 22.01.2012, 00:38 | |||||||
|
Double.Parse - метод (String, IFormatProvider) IFormatProvider
1
|
|||||||
|
1 / 1 / 0
Регистрация: 20.05.2011
Сообщений: 3
|
||||||
| 15.03.2012, 15:53 | ||||||
|
Как вариант -
1
|
||||||
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
||||||
| 16.06.2012, 11:44 | ||||||
1
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 16.06.2012, 11:55 | ||
|
Это вполне легальный ввод для инвариантной культуры, но предложенный вами код выбросит на нем FormatException.
1
|
||
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 16.06.2012, 12:09 | |
|
Такого мои пользователи обычно не вводят. Им не извращаться надо, а параметр задать. Не думая при этом о точках и запятых.
В случае исключения я дисаблю кнопку ОК и крашу едит контрол красным цветом. Так что программа защищёна от попыток свалить её посредством ввода ерунды в качестве коэффициента. Инвариантную культуру я применяю для того, чтобы парсер правильно обработал точку, а не для того, чтобы задействовать весь функционал инвариантной культуры.
1
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 16.06.2012, 12:37 | |||||
|
Сурово. Сурово. А теперь серьезно. Замена запятой на точку в вашем коде говорит о том, что некоторые пользователи могут ввести значение так, а некоторые - иначе. Другими словами, ваши пользователи вводят числа так, как они привыкли это делать, исходя из настроек системы или личных предпочтений. Что, в свою очередь, не исключает ситуации, где пользователь привык вводить значения именно так: 100,000.00 (особенно бухгалтеры этим грешат). В результате логика вашего приложения помогает одним пользователям, но не другим. Дискриминация? Или просто большинство не отчитывается перед меньшинством? Почему бы не предположить, что пользователь будет вводить числа так, как настроена его система и, следовательно, оставить обычный парс, учитывающий текущие настройки? Вижу несколько причин, но хотелось бы увидеть что привело именно вас к такому решению. Дисклаймер: в моем сообщении нет наездов или попыток поучать (почему-то некоторые это в моих сообщениях видят). Всего лишь пытаюсь вести продуктивную дискуссию с коллегами о юзабилити пользовательских интерфейсов.
2
|
|||||
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 16.06.2012, 15:04 | |
|
Если конструктивно - то мои пользователи и не пытаются делить разряды знаками препинания. Ну такие у них граничные условия. Единственная их на сегодня озвученная проблема - это неоднозначность трактовки операционной системой точки на цифровой части клавиатуры в зависимости от региональных настроек и текущего языка ввода. Мой подход от этого их защитил. Вот и всё.
Ваши, пользователи, похоже, привыкли работать с большими числами и им удобнее делать так. Вам пришлось учесть эту особенность. Никто и не сомневался в том, что это вам успешно удалось. Это вовсе не значит, что теперь из-за этого другие подходы неправомерны. Просто они для разных групп пользователей. Одним пользователям привычно отделять разряды запятыми. Другие хотят, чтобы программе было всё равно, что введено в качестве десятичного разделителя - точка или запятая, и грузить их тем, что вот это разделитель между тысячами а вот это - разделитель между целой и дробной частью было бы в высшей степени неюзеролюбиво. Потому что им не о форматах хотелось бы думать, а о предметной области. То есть получается, что юзабилити вне контекста применения не существует. Нужно учитывать специфику работы целевого пользователя. Я надеюсь, что буду правильно понят и никто не подумает, что я тут с кем-то спорю. Я умею не только говорить, но и слушать. Про применение бухгалтерами запятых в качестве разделителей - это новая для меня информация, за это спасибо. Думаю, что обсуждение наличие разных сторон разбора чисел будет полезно всем читающим это.
2
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 16.06.2012, 16:19 | ||||
|
Спасибо за пояснение. ![]() Но вот часто приходится делать приложения, используемые довольно большим количеством людей с довольно большим разбросом по национальностям и географии, где каждый хочет чтобы было удобно именно ему, а софтина должна работать одинаково для всех. Через это порой рождаются такие уродцы, что хочется код стереть, комп сжечь, а глаза выколоть - только бы эти костыли не видеть. Потому проблема многоязыковой поддержки для меня особо актуальна, вот и интересно как люди решают подобные проблемы и чем при этом руководствуются.
1
|
||||
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 16.06.2012, 17:27 | |
|
Да, иногда эта поддержка всего в одном стремится дойти до абсурда.
Иногда, решая проблемы одних пользователей создают проблемы другим пользователям (например, с названиями счётчиков производительности, которые в русскоязычном варианте с непривычки не сразу и найдёшь, не говоря уже о порядке их следования при алфавитной сортировке). А в других случаях делают разные билды для разных культур. Например, насколько я понимаю, для русскоязычных пользователей MS делает отдельный билд офиса. Оказываеся, в нашей отрасли народного хозяйства тоже невозможно быть хорошим для всех заинтересованных товарищей.
1
|
|
|
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
|
|
| 15.08.2019, 19:20 | |
|
Почему я раньше не нашел эту тему... Я столько мучался с проблемой, что при вычислениях чисел 23,12 умножаются на 100 на некоторых компьютерах. Я даже не мог представить, что в конвертировании чисел может быть такая мура, только сегодня случайно гуглил и набрел на эту тему
0
|
|
| 15.08.2019, 19:20 | |
|
Помогаю со студенческими работами здесь
16
Как отучить C# от региональных настроек? работа с Double.Parse
Double.Parse не работает: Входная строка имела неверный формат Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|