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

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

5 Ответы

0 голосов
от
Одна из веселых частей мульти-культурного программирования числовых форматов. Американцы используют 10,000.50 Немцы используют 10.000,50 Французы используют 10 000,50 Мой первый подход будет принимать строку, парсить его назад, пока не столкнуться с сепаратором и использовать это как десятичный разделитель. Есть явная недоработка с этим: 10.000 интерпретироваться как 10. Другой подход: если строка содержит 2 разных нечисловые символы, использовать последний в качестве десятичного разделителя и отказаться от других. Если у меня есть только одно, проверить, если это происходит не раз и отбрасывает его, если он делает. Если он появляется только один раз, проверить, если он имеет 3 цифры после нее. Если да, сбросьте его, в противном случае, использовать его в качестве десятичного разделителя. Очевидное "лучшее решение" будет для определения языка пользователя или браузера, но это не работает, если у вас есть француз с помощью ан-Нас окна/браузера. Делает .net не содержит каких-то мифических черная магия плавающей точкой парсер, который лучше, чем
Double.(Try)Parse()
пытается автоматически определить формат числа?
0 голосов
от
Я думаю, лучшее, что можно сделать в этом случае-это взять их ввода, а затем показать им, что вы думаете, они имели в виду. Если они не согласны, покажите их формат вы ожидаете и заставить их снова ввести его.
0 голосов
от
Я не знаю стороне ASP.NET проблемы, но .Net имеет довольно мощный класс: система.Глобализация.Свойство CultureInfo. Вы можете использовать следующий код для разбора строки, содержащей значение типа double:
double d = double.Parse("100.20", CultureInfo.CurrentCulture);
//  

Если ASP.NET каким-то образом (т. е. с помощью заголовков HTTP-запроса) передает текущего пользователя приложения либо приложения.Свойства currentculture или CultureInfo.Currentuiculture выполняющегося, они будут работать нормально.
0 голосов
от
Вы не можете угодить всем. Если я войду в десятку, как 10.000, а кто-то входит в десять тысяч 10.000, вы не можете справиться, что без некоторых знаний о культуре ввода. Определения культуры как-то (браузер, настройки системы - какая польза делу? АСП? Внутреннее приложение, или открыта для мира?), или привести пример ожидаемого форматирование и использовать максимально щадящий парсера вы можете. Наверное, что-то вроде:
double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture);
0 голосов
от
Разница между 12.345 на французском и английском языках является фактором 1000. Если вы предоставляете ожидаемого диапазона, где Макс
...