成千上万时将字符串转换为双倍

时间:2019-04-06 15:16:56

标签: c# parsing double

我正在尝试将字符串转换为double(然后转换为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)时会引发Format Exception。 似乎并不能消除5到000之间的空格。

我也尝试了Convert.ToDouble(additionalSpacesRemoved),但没有帮助。还有其他方法吗?

我希望达到“ 5000”。

2 个答案:

答案 0 :(得分:0)

似乎您想将第三个字符串用|分隔为int

您的代码几乎正确。您只是颠倒了参数'.', ','的顺序。它们应该是',', '.'。您要替换的字符优先。这是一些工作代码:

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

答案 1 :(得分:0)

尝试一下

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;
}