Одна из забавных частей мультикультурного программирования - числовые форматы.
- Американцы используют 10000.50
- Немцы используют 10.000,50
- Французский использовать 10 000,50
Мой первый подход заключается в том, чтобы взять строку, разобрать ее в обратном направлении, пока я не столкнусь с разделителем, и использовать его в качестве моего десятичного разделителя. В этом есть очевидный недостаток: 10.000 будет интерпретироваться как 10.
Другой подход: если строка содержит 2 разных нечисловых символа, используйте последний как десятичный разделитель и отбросьте остальные. Если у меня есть только один, проверьте, происходит ли это более одного раза, и откажитесь, если это произойдет. Если он появляется только один раз, проверьте, есть ли после него 3 цифры. Если да, откажитесь от него, в противном случае используйте его в качестве десятичного разделителя.
Очевидным "лучшим решением" будет обнаружение культуры пользователя или браузера, но это не сработает, если у вас есть француз, использующий Windows/браузер в США.
Содержит ли .net Framework какой-то мифический парсер с плавающей запятой черной магии, который лучше Double.(Try)Parse()
при попытке автоматического определения формата чисел?