Преобразовать строку в двойную, когда есть тысячи - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь преобразовать строку в удвоение (а затем в int), но возникает исключение. Моя программа старая, и я не уверен, что это так. Когда я тестирую его в Visual Studio 2017, кажется, он работает?

   string line = "11-03-1-01   |   1 | 5 000,00|1054 |P:1|KP:|RB:"; 

    private static int GetCount(string line)
    {
        var splittedLine = line.Split('|');
        var lineWithReplacedDot = splittedLine[2].Replace('.', ',');
        var lineWithSpacesRemoved = lineWithReplacedDot.Replace(" ", "");
        var additionalSpacesRemoved = lineWithSpacesRemoved.Trim();
        var parsedToDouble = Double.Parse(additionalSpacesRemoved);
        var parsedToInteger = (int)parsedToDouble;

        return parsedToInteger;

    }

Когда я делаю это в моей старой программе, она вызывает исключение формата при попытке выполнить Double.Parse (AdditionalSpacesRemoved). Кажется, что это не удаляет пространство между 5 и 000.

Я также пробовал Convert.ToDouble (AdditionalSpacesRemoved), но это не помогло. Есть ли другие способы?

Я бы хотел получить "5000" в результате.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Попробуйте это

static void Main(string[] args)
{
    string line = "11-03-1-01   |   1 | 5 000,00|1054 |P:1|KP:|RB:";
    Debug.WriteLine(GetCount(line));
    // 5000
}

public static int GetCount(string line)
{
    var parts = line.Split('|');
    var text = parts[2].Trim();

    var style = new NumberFormatInfo()
    {
        NumberDecimalSeparator=",",
        NumberGroupSeparator=" "
    };

    if (decimal.TryParse(text,
        NumberStyles.Float | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, 
        style, out decimal result))
    {
        return (int)result;
    }

    return 0;
}
0 голосов
/ 06 апреля 2019

Похоже, вы хотите получить третью строку, разделенную | как int.

Ваш код почти верен. Вы просто изменили порядок аргументов '.', ','. Они должны быть ',', '.'. Символ, которого вы хотите заменить, идет первым. Вот некоторый рабочий код:

private static int GetCount(string line)
{
    return (int)Convert.ToDouble(
        line.Split('|')[2]
            .Replace(" ", "")
            .Replace(',', '.'));
}
...