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