字符串到双倍货币有错误的结果(逗号点问题)

时间:2016-12-21 22:43:53

标签: c# string double converter currency

现在我有这个问题,逗号和小数点和千位分隔符。

我的计划从不同来源获得价格。

一些美国人,一些欧洲人 有些价格就像2000.0.20一样20000.20

有些像2000.0,20再次20000.20

我找不到让我的代码识别这两种格式的方法。 我试图使用替换将逗号变为点,但如果数字中有数千个分隔符,我会遇到问题。如何在没有这些问题的情况下将字符串转换为double?

我试过这个 但如果有两种不同的文化,它就不会起作用

            double.TryParse(price, NumberStyles.Currency, CultureInfo.InvariantCulture, out priceD);

2 个答案:

答案 0 :(得分:1)

这就是我想出来的

double FixUnknownCurrency(string amountText)
{
    amountText = amountText?.Trim()?.Replace(" ", string.Empty);
    if(string.IsNullOrWhiteSpace(amountText))
        return 0d;  

    if(amountText.Length < 3)
        return double.Parse(amountText);

    var currencyDecimal = amountText[amountText.Length-3];
    if(Char.IsNumber(currencyDecimal))
        return double.Parse(amountText);

    if(currencyDecimal == '.' || currencyDecimal == ',')
    {
        amountText = amountText.Replace(",", string.Empty).Replace(".", string.Empty);
        return double.Parse(amountText) / 100d;
    }

    return double.Parse(amountText);
}

在这里尝试一下。火车迟到:https://dotnetfiddle.net/HTiL4s

答案 1 :(得分:0)

除了尝试不同的文化以寻找成功之外,我不知道更好的方法。

创建一个这样的方法:

public double CurrencyToDouble(string input)
{
    // Will hold the result
    double result = 0;

    // Try US culture
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.GetCultureInfo("en-US"), out result)) { return result; }

    // Try DE culture
    if (double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.GetCultureInfo("de-DE"), out result)) { return result; }

    // Try current system culture
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.CurrentCulture, out result)) { return result; }

    // Try invariant culture
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.InvariantCulture, out result)) { return result; }

    // Try more common cultures...

    // Unsuccessful, throw some kind of error
    throw new FormatException("Could not convert!");
}

输入:

  

CurrencyToDouble( “2000,0.20”);
  CurrencyToDouble( “2000.0,20”);

输出:

  

20000.2
  20000.2