Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Разбор чисел с плавающей запятой: есть ли алгоритм Catch All?
Одна из самых интересных частей мультикультурного программирования-это числовые форматы.
- Американцы используют 10,000.50
- Немцы используют 10.000,50
- Французы используют 10 000,50
Мой первый подход состоял бы в том, чтобы взять строку, разобрать ее назад, пока я не найду разделитель, и использовать его в качестве десятичного разделителя. В этом есть очевидный недостаток: 10.000 будет интерпретировано как 10.
Другой подход: если строка содержит 2 разных нечисловых символа, используйте последний в качестве десятичного разделителя и отбросьте остальные. Если у меня есть только один, проверьте, не происходит ли это несколько раз, и отбросьте его, если это происходит. Если он появляется только один раз, проверьте, есть ли после него 3 цифры. Если да, то отбросьте его, в противном случае используйте его в качестве десятичного разделителя.
Очевидным "best solution" было бы определить культуру пользователя или браузер, но это не работает, если у вас есть француз, использующий en-US Windows/Browser.
Может быть, фреймворк .net содержит какой-то мифический парсер с плавающей точкой черной магии, который лучше, чем Double.(Try)Parse() , пытается автоматически определить формат чисел?
Я не знаю ASP.NET сторону проблемы, но .NET имеет довольно мощный класс: System.Globalization.CultureInfo . Для анализа строки, содержащей двойное значение, можно использовать следующий код:
double d = double.Parse("100.20", CultureInfo.CurrentCulture);
// -- OR --
double d = double.Parse("100.20", CultureInfo.CurrentUICulture);
Если ASP.NET каким-то образом (т. е. с помощью заголовков запросов HTTP) передает CultureInfo текущего пользователя либо в CultureInfo.CurrentCulture, либо в CultureInfo.CurrentUICulture, они будут работать нормально.
Ты не можешь угодить всем. Если я ввожу десять как 10.000, а кто-то вводит десять тысяч как 10.000, вы не можете справиться с этим без некоторого знания культуры ввода. Определите культуру каким-то образом (браузер, Системные настройки - каков вариант использования? ASP? Внутреннее приложение или открытое миру?), или приведите пример ожидаемого форматирования и используйте самый мягкий синтаксический анализатор, который вы можете. Наверное, что-то вроде:
double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture);
Разница между 12.345 во французском и английском языках составляет 1000 раз. Если вы предоставляете ожидаемый диапазон, где max < 1000*min,, вы можете легко догадаться.
Возьмем, например, рост человека (включая младенцев и детей) в мм.
При использовании диапазона 200-3000 входное значение 1.800 или 1800 может однозначно интерпретироваться как 1 метр и 80 сантиметров, тогда как входное значение 912.300 или 912 300 может однозначно интерпретироваться как 91 сантиметр и 2.3 миллиметра.