balalaika's blog

By balalaika, history, 8 years ago, In Russian

Издревле повелось, что в строковом представлении дробных числах роль разделителя целой от дробной части играет символ точка. И в плюсах код а-ля:

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 справедливо блокирует действия записи в этом модуле)? И возможно ли изменить настройки ОС на сервере, чтобы не приходилось вообще обходить это?

Да, шарп + олимпиадное проганье = жесть, но все равно интересно.

  • Vote: I like it
  • +24
  • Vote: I do not like it