Блог пользователя balalaika

Автор balalaika, история, 8 лет назад, По-русски

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

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

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

  • Проголосовать: нравится
  • +24
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится -9 Проголосовать: не нравится

На выводе делаю так:

Console.WriteLine(2.5d.ToString(CultureInfo.InvariantCulture));

Не помню чтобы какие-то извращения приходилось делать на входе.

Задавал этот вопрос администрации, они ответили что это личные проблемы пишущих на шарпе людей и со своей стороны они менять ничего не намерены.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Никому не нужен шарп... Можешь скинуть пример кода со считыванием дробных чисел?

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      Давно не попадались мне задачи на чтение дробных чисел. Сейчас в запуске зашло такое решение:

      double d = double.Parse(reader.ReadLine(), System.Globalization.CultureInfo.InvariantCulture); writer.Write(d.ToString(System.Globalization.CultureInfo.InvariantCulture));

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    А можно у минусующих узнать в чём дело?

»
8 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

System.Threading не предлагать — CF справедливо блокирует действия записи в этом модуле

ILSpy и System.Reflection сделали свое дело. Код под спойлером.

Спойлер