С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 09.11.2024
Сообщений: 46

Перестал работать CultureInfo.CurrentCulture

29.11.2025, 07:59. Показов 624. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Будучи студентом я создаю относительно простые программы для решения разнообразных задач.
Иногда пользователю нужно ввести число (в тот же TextBox), а программе- считать его. Иногда эти числа должны быть дробными. В зависимости от выбранного языка, пользователь может ввести "1,5" или "1.5". И, чтобы программа нормально считывала подобные числа, я использовал подобное присвоение:
C#
1
2
3
4
using System.Globalization; 
//...
 
double t = double.Parse(textT.Text, CultureInfo.CurrentCulture);
И все хорошо работало.
Но спустя какое то время эта строчка кода перестала работать, что в новых, что в старых программах и у меня стал восприниматься только русский (1,5) вариант.
Как это исправить? Может программе надо дать еще какой-нибудь using или впринципе вместо CultureInfo.CurrentCulture можно использовать что то другое?
Да, я знаю, что можно просто изменить точку на запятую при помощи Replace(), но это мне кажется нагромождением и не уверен, что преподаватель это оценит.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2025, 07:59
Ответы с готовыми решениями:

установить CultureInfo
Народ, есть проблема, при вызове, таких методов как ToString() или String.Format(), в зависимоти от...

Поменять CultureInfo всего приложения
Как сделать чтобы Parse, ToString, работали не в зависимости от локальных настроек, а допустим...

Перенос CultureInfo в C++
CultureInfo ci = CultureInfo.InvariantCulture; Что это такое, возможно ли превращение данной...

7
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.11.2025, 08:08
Можно написать рядом с полем ввода, какой символ является десятичным разделителем.

Можно установить программе UI или потоку нужную культуру явно, чтобы в ней и парсить.

Можно TryParse вызвать с одной культурой, а если не прокатит - с другой.

Культуру можно получить по указанному идентификатору "ru-RU" или "en-US".
Также отдельно выделена похожая на английскую инвариантная культура CultureInfo.InvariantCulture , в которой принято писать в файлы xml, json, БД и т.п., и парсить их обратно.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
29.11.2025, 10:21
Цитата Сообщение от KindHiros Посмотреть сообщение
double t = double.Parse(textT.Text, CultureInfo.CurrentCulture);
Несколько бессмысленная писанина, т.к. по умолчанию это и подставляется.

Цитата Сообщение от KindHiros Посмотреть сообщение
Но спустя какое то время эта строчка кода перестала работать, что в новых, что в старых программах и у меня стал восприниматься только русский (1,5) вариант.
Перестало работать везде, или только на вашем ПК?

Ещё такой момент -- это формат вроде как зависит от региональных настроек, а не самого языка. Т.е. можно указать English(US), но при это поправить настройки для разделителей дробей на запятую.

Цитата Сообщение от KindHiros Посмотреть сообщение
textT.Text
можно использовать numeric для ввода, который априори не позволяет невалидное значение. Либо написать свой аналог textbox, который будет фильтровать ввод и разрешать только числовой, при этом точку и запятую будет автоматом конвертить к нужному формату.
0
3 / 3 / 0
Регистрация: 09.11.2024
Сообщений: 46
29.11.2025, 12:16  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Несколько бессмысленная писанина, т.к. по умолчанию это и подставляется.
На удивление без этого раньше оно вообще не работало, не воспринимая английское написание. Может потому что я так же не вставлял using System.Globalization;

Цитата Сообщение от Wolfdp Посмотреть сообщение
это формат вроде как зависит от региональных настроек, а не самого язык
У меня регион Америка, но у самого ПК своя настройка региона на Россию, которую я не смог изменить. Но стоит заметить, что данная проблема появилась, возможно, после недавнего обновления.

Ну и да, я придумал подобное решение:
C#
1
2
3
 string text = textT.Text;
 text = text.Replace('.', ',');
 double t = double.Parse(text);
Оно простое, но занимает аж 3 строчки.
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.11.2025, 12:20
Это хрень, а не решение.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
29.11.2025, 12:41
Ужс...

Давайте сначала: что вы хотите в результате? Чтобы сепаратор всегда был в виде точки вне зависимости от региональных настроек?
0
3 / 3 / 0
Регистрация: 09.11.2024
Сообщений: 46
30.11.2025, 03:38  [ТС]
Ну да, примерно такой реакции я и ожидал.
Я хочу, чтобы программа принимала число с любым сепаратором.
Желательно, чтобы это было красиво, для чего я изначально и использовал CultureInfo.CurrentCulture. Не уверен как, но оно позволяло мне вводить как 1.5 так и 1,5 до недавнего времени.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
30.11.2025, 06:15
Цитата Сообщение от Wolfdp Посмотреть сообщение
Либо написать свой аналог textbox, который будет фильтровать ввод и разрешать только числовой, при этом точку и запятую будет автоматом конвертить к нужному формату.
Я бы двигался в этом направлении. В идеале вообще наваять контрол, который будет принимать/отдавать double в свойствах, а на вводе разрешал только цифры и разделитель. Или взять готовый, в сети 100500 решений для такой типичной задачи.

Чуть проще выглядит как-то так

C#
1
2
3
4
5
6
7
8
9
double Parse(string input)
{
    if (double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, var out result)
        return result;
    if(double.TryParse(input, NumberStyles.Any, CultureInfo.GetCultureInfo("ru-RU"), out result))
        return result;
 
    throw new FormatException("Строка не является допустимым числом.");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2025, 06:15
Помогаю со студенческими работами здесь

CultureInfo.InvariantCulture не делит целую и дробную часть
День добрый! Есть такая строка: STOLB.Add(double.Parse(strSEP, CultureInfo.InvariantCulture));...

Установка CultureInfo для всего приложения
Доброго времени суток. Нужно установить для всего приложения дефолтный формат даты "dd.MM.yyyy",...

Как убрать во всех проектах Visual Studio сразу такую вещь, как CultureInfo? Заменить запятые на точки в double
Подскажите, как настроить Visual Studio, чтобы вводить числа типа double с использованием плавающей...

Ошибка CS0119 .Convert(object, Type, object, CultureInfo)" является метод, который недопустим в данном контексте
Здравстуйте! Я хочу создать конвертер base64 строки в изображение. При создании отдельного класса...

Не все даты парсятся. Что изменилось в CultureInfo?
Доброе утро! Подскажите что изменилось с CultureInfo, почему в NET8 неправильно парсятся даты? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru