Этот пост о C # и .Net, но некоторая информация полезна для других технологий.
Насколько я помню, у меня были проблемы с приложениями или играми, которые вылетали из-за другого стиля анализа десятичных чисел. Это происходит очень часто, от приложений САПР, библиотек до веб-страниц. Я не уверен, что это невежество или отсутствие знаний, но это действительно раздражает.
В чем проблема? Здесь - это статья в вики, но короткая:
Вот карта, которая показывает, какой тип десятичного разделителя (десятичной метки) используется во всем мире.
![map of diffrent decimal separator](https://i.stack.imgur.com/ODeSS.png)
Десятичные знаки:
- Период - синий
- Запятая - Зеленый
- незападно-арабские цифры - красный
- Неизвестно - серый
Большинство стран Европы, Южной Америки пишут 1 000 000,00 или 1000000,00, иногда 1.000.000,00, в противоположность «имперскому» (отмечен синим), пишут 1 000 000,00
Позвольте мне дать вам несколько из всех проблем, которые я решал в прошлом месяце.
- Номер на веб-страницах, трудно читаемых: Возьмем одно из самых просмотренных видео YT .
Это показывает мне 390159851. Числа свыше миллиона очень трудно читать, каков порядок? Это 39 млн или 390?
Mirosoft Пример XNA для Windows Phone 7 : Существует очень удобный класс, который анализирует XML-файл для создания анимации XNA
/// <summary>
/// Loads animation setting from xml file.
/// </summary>
private void LoadAnimiationFromXML()
{
XDocument doc =
XDocument.Load("Content/Textures/AnimationsDefinition.xml");
XName name = XName.Get("Definition");
var definitions = doc.Document.Descendants(name);
if (animationDefinition.Attribute("Speed") != null)
{
animation.SetFrameInvterval(TimeSpan.FromMilliseconds(
double.Parse(animationDefinition.Attribute("Speed").Value)));
}
double.Parse
выдает исключение, одной простой подсказкой является использование XmlConvert.ToDouble();
или разбор с InvariantCulture
.
.Net приложение, которое использует CSV-файлы для хранения входного вектора как CSV - также выдает.
Еще одно приложение .Net, в котором есть разбор внутри класса - throws.
Так как мы можем это исправить?
- Исправить ошибку в коде - возможно только с доступным исходным кодом и утомительно.
- Изменение данных (CVS, XML и т. Д.) - даже с возможными, не очень довольными изменением данных.
- Измените десятичный разделитель по умолчанию для ОС - этого не произойдет.
Есть ли другой способ решить эту проблему? Можно ли сделать приложение инвариантным? Как запуск приложения в другой среде.
PS. Я хотел бы запустить приложение, но у меня нет кода.