У меня есть двойное число как строка. Число
202.667,40
Что такое 202667.4
Как я могу разобрать эту строку, чтобы получить значение типа: Double.Parse( "202.667,40", "что здесь" ) или любой другой метод для получения значения. Благодаря
У меня есть двойное число как строка. Число
202.667,40
Что такое 202667.4
Как я могу разобрать эту строку, чтобы получить значение типа: Double.Parse( "202.667,40", "что здесь" ) или любой другой метод для получения значения. Благодаря
Во-первых, вам нужно знать, в какой культуре это число, а затем:
CultureInfo culture = new CultureInfo("de"); // I'm assuming german here.
double number = Double.Parse("202.667,40", culture);
Если вы хотите проанализировать использование текущей культуры потоков, которая по умолчанию является той, которая установлена для текущего пользователя:
double number = Double.Parse("202.667,40", CultureInfo.CurrentCulture);
Я думаю, что нашел решение, которое не требует культуры. Используя NumberFormatInfo, вы можете форсировать формат независимо от культуры:
// This is invariant
NumberFormatInfo format = new NumberFormatInfo();
// Set the 'splitter' for thousands
format.NumberGroupSeparator = ".";
// Set the decimal seperator
format.NumberDecimalSeparator = ",";
Затем позже:
System.Diagnostics.Debug.WriteLine(double.Parse("202.667,40", format)));
Выходы:
202667,4
Конечно, этот вывод (внутренний toString()) может отличаться в зависимости от культуры (!)
Обратите внимание, что изменение ввода на "202,667.40" приведет к ошибке синтаксического анализа, поэтому формат должен соответствовать ожидаемому входу.
Надеюсь, это поможет кому-то.
Для большей гибкости вы можете установить NumberDecimalSeparator
string number = "202.667,40";
double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}});
Вы можете использовать Double.Parse(your_number, CultureInfo.CurrentCulture) и установить CurrentCulture соответственно с помощью Thread.CurrentThread.CurrentCulture.
Пример:
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
а затем
Double.Parse(your_number, CultureInfo.CurrentCulture);
Обратите внимание, что если вы явно назначаете культуру CurrentThread, она применима только к этому потоку.
Вместо того, чтобы указывать локаль во всех синтаксических разборах, я предпочитаю устанавливать локальную область приложения, хотя, если строковые форматы не являются согласованными в приложении, это может не сработать.
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT");
Определяя это в начале вашего приложения, все двойные парсы ожидают запятую как десятичный разделитель.
var val=double.Parse( yourValue, CultureInfo.InvariantCulture);
http://www.erikschierboom.com/2014/09/01/numbers-and-culture/
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE"));
Вместо de-DE использовать любую культуру, в которой находится строка.