Как я анализирую строку с десятичной точкой к двойному?

Приветствуйте Sreenath! Работайте эти Ubuntu live cd, смонтируйте диск, где Вы установили Ubuntu (работающий Gparted, приложение помогает Вам видеть, где Ubuntu), и откройте terminal(Cntrl+Alt+T open a terminal).Type эта команда Sudo update-grub.If, это просит, чтобы Вы были корнем, затем тип sudo -i и выполнили предыдущую команду. Перезагрузите свою систему, и она должна работать.

216
задан CodeCaster 16 November 2013 в 07:01
поделиться

5 ответов

double.Parse("3.5", CultureInfo.InvariantCulture)
389
ответ дан 23 November 2019 в 04:18
поделиться

Уловка состоит в том, чтобы использовать инвариантный язык и региональные параметры для анализа точки во всех культурах.

double.Parse("3.5", System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);
15
ответ дан 23 November 2019 в 04:18
поделиться

Обычно я использую функцию с несколькими культурами для синтаксического анализа пользовательского ввода, в основном потому, что если кто-то привык к цифровой клавиатуре и использует культуру, в которой в качестве десятичного разделителя используется запятая, этот человек будет использовать точку цифровой клавиатуры вместо запятая.

public static double GetDouble(string value, double defaultValue)
{
    double result;

    //Try parsing in the current culture
    if (!double.TryParse(value, System.Globalization.NumberStyles.Any, CultureInfo.CurrentCulture, out result) &&
        //Then try in US english
        !double.TryParse(value, System.Globalization.NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out result) &&
        //Then in neutral language
        !double.TryParse(value, System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out result))
    {
        result = defaultValue;
    }

    return result;
}

Однако будьте осторожны, комментарии @nikie верны. В свое оправдание я использую эту функцию в контролируемой среде, где я знаю, что культура может быть en-US, en-CA или fr-CA. Я использую эту функцию, потому что во французском языке мы используем запятую в качестве десятичного разделителя, но любой, кто когда-либо работал в сфере финансов, всегда будет использовать десятичный разделитель на цифровой клавиатуре, но это точка, а не запятая. Так что даже в культуре fr-CA мне нужно анализировать число, в котором десятичным разделителем будет точка.

70
ответ дан 23 November 2019 в 04:18
поделиться
Double.Parse("3,5".Replace(',', '.'), CultureInfo.InvariantCulture)

Замените запятую точкой перед синтаксическим анализом. Полезно в странах с запятой в качестве десятичного разделителя. Подумайте об ограничении ввода пользователем (при необходимости) одной запятой или точкой.

17
ответ дан 23 November 2019 в 04:18
поделиться

Следующий код выполняет работу в любом сценарии. Это немного разбор.

List<string> inputs = new List<string>()
{
    "1.234.567,89",
    "1 234 567,89",
    "1 234 567.89",
    "1,234,567.89",
    "123456789",
    "1234567,89",
    "1234567.89",
};
string output;

foreach (string input in inputs)
{
    // Unify string (no spaces, only .)
    output = input.Trim().Replace(" ", "").Replace(",", ".");

    // Split it on points
    string[] split = output.Split('.');

    if (split.Count() > 1)
    {
        // Take all parts except last
        output = string.Join("", split.Take(split.Count()-1).ToArray());

        // Combine token parts with last part
        output = string.Format("{0}.{1}", output, split.Last());
    }

    // Parse double invariant
    double d = double.Parse(output, CultureInfo.InvariantCulture);
    Console.WriteLine(d);
}
1
ответ дан 23 November 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: