Как исправить приложение, в котором возникла проблема с десятичный разделитель

Этот пост посвящен C # и .Net, но некоторая информация полезна для других технологий.

Насколько я помню, у меня были проблемы с приложениями или играми, которые вылетали из-за другого стиля разбора десятичных чисел. . Это происходит очень часто, от приложений САПР, библиотек до веб-страниц. Не знаю, незнание это или незнание, но это действительно раздражает.

В чем проблема? Вот статья об этом вики, но она краткая:

Вот карта, которая показывает, какой вид десятичного разделителя (десятичный знак) используется во всем мире. map of diffrent decimal separator

Десятичные знаки:

  • Точка - синий
  • Запятая - зеленый
  • Не западноарабские цифры - красный
  • Неизвестно - серый

Большинство стран Европы и Южной Америки пишут 1 000 000, 00 или 1000000,00 иногда 1.000.000,00 вместо «имперской» (отмеченной синим) напишите 1,000,000.00

Позвольте мне привести несколько примеров из всех проблем, с которыми я столкнулся в прошлом месяце.

  1. Число на веб-страницах трудно читать: Давайте возьмем одно из самых просматриваемых видео YouTube . Он показывает мне 390159851. Число больше миллиона очень трудно читать, какой порядок? Это 39 миллионов или 390?
  2. Mirosoft Пример XNA для Windows Phone 7 : Есть очень удобный класс, который анализирует XML-файл для создания анимации XNA

     /// 
     /// Загружает настройки анимации из xml файла.
     /// 
    частная пустота LoadAnimiationFromXML ()
     {
      XDocument doc =
      XDocument.Load («Контент / Текстуры / AnimationsDefinition.xml»);
      XName name = XName.Get («Определение»);
      var definitions = doc.Document.Descendants (имя);
    
    
      if (animationDefinition.Attribute ("Speed")! = null)
      {
      animation.SetFrameInvterval (TimeSpan.FromMilliseconds (
      double.Parse (animationDefinition.Attribute ("Скорость"). Значение)));
      }
     

    double.Parse генерирует исключение, одна простая задача - использовать XmlConvert.ToDouble (); или выполнить синтаксический анализ с помощью InvariantCulture .

  3. .Net-приложение, которое использует Файлы CSV для хранения входного вектора в виде CSV - также генерируют.

  4. Другое приложение .Net, которое имеет некоторый синтаксический анализ внутри класса, - выбрасывает.

Итак, как мы можем это исправить?

  • Исправить ошибку в коде - возможно только с доступным исходным кодом и утомительно.
  • Изменить данные (CVS, XML и т. д.) - даже с возможным, не очень довольным изменением данных.
  • Изменить десятичный разделитель ОС по умолчанию - не произойдет.

Есть ли другой способ решить эту проблему? Могу ли я сделать приложение неизменным? Например, запуск приложения в другой среде.

PS. Я хочу запустить приложение, но у меня нет кода.

8
задан casperOne 4 May 2012 в 21:14
поделиться