Разобрать строку в десятичную, запятую и точку - PullRequest
6 голосов
/ 02 мая 2011

Как разобрать строку в десятичную, чтобы она работала для обоих форматов - с запятыми и точками?

[Fact]
public void foo(){
  var a="1,1";
  var b="1.1";
  Assert.Equal(Parse(a),Parse(b));
}
private decimal Parse(string s){
  return decimal.Parse(s,NumberStyles.Any,
    CultureInfo.InvariantCulture);
}

выход:

Test 'Unit.Sandbox.foo' failed: Assert.Equal() Failure
Expected: 11
Actual:   1,1

Ответы [ 3 ]

7 голосов
/ 02 мая 2011

Вы можете попробовать это:

private decimal Parse(string s){
  s = s.Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
  return decimal.Parse(s,NumberStyles.Any,
    CultureInfo.InvariantCulture);
}
5 голосов
/ 22 сентября 2011

Как насчет этого?

private static decimal Parse(string s)
    {
        s = s.Replace(",", ".");
        return decimal.Parse(s);
    }
0 голосов
/ 02 мая 2011

Вы должны получить желаемый результат, изменив десятичный разделитель валют на запятую перед анализом десятичной строки запятой.Здесь есть некоторые ресурсы питания:

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencydecimalseparator.aspx#Y888

Вы можете альтернативно реализовать свой собственный Iformatprovider, как описано здесь:

http://msdn.microsoft.com/en-us/library/t7xswkc6.aspx http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx

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

...