Шарп и разделитель в дробном числе

Revision ru1, by balalaika, 2016-12-03 20:36:50

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

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

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

Tags шарп, вещественные числа

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru1 Russian balalaika 2016-12-03 20:36:50 1322 Первая редакция (опубликовано)