现在我有这个问题,逗号和小数点和千位分隔符。
我的计划从不同来源获得价格。
一些美国人,一些欧洲人 有些价格就像2000.0.20一样20000.20有些像2000.0,20再次20000.20
我找不到让我的代码识别这两种格式的方法。 我试图使用替换将逗号变为点,但如果数字中有数千个分隔符,我会遇到问题。如何在没有这些问题的情况下将字符串转换为double?
我试过这个 但如果有两种不同的文化,它就不会起作用
double.TryParse(price, NumberStyles.Currency, CultureInfo.InvariantCulture, out priceD);
答案 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