Издревле повелось, что в строковом представлении дробных числах роль разделителя целой от дробной части играет символ точка. И в плюсах код а-ля:
double d;
cin >> d;
cout << d;
считает и выведет дробное число с точкой, если на вход подастся строка "2.5". Однако в шарпе (насколько мне известно, еще в FPC, поправьте, если я ошибаюсь) символ, который будет разделителем, определяется настройками ОС. В нашем случае, если на вход подать строку "2.5" следующим кодом:
double d;
d = double.Parse(Console.ReadLine());
то выбросится исключение, поскольку с точки зрения шарпа, в дробных числах разделителем должна быть запятая. И наоборот, код:
Console.WriteLine(2.5);
выведет строку "2,5", что не принимается тестирующей системой за дробное число. И приходится делать извращения вроде:
double d;
d = double.Parse(Console.ReadLine().Replace('.', ','));
Console.WriteLine(d.ToString().Replace(',', '.'));
Есть ли в шарпе иные способы обхода таких ситуаций (System.Threading не предлагать — CF справедливо блокирует действия записи в этом модуле)? И возможно ли изменить настройки ОС на сервере, чтобы не приходилось вообще обходить это?
Да, шарп + олимпиадное проганье = жесть, но все равно интересно.