将字符串解析为十进制,逗号和句点

Arn*_*psa 6 c# parsing decimal

如何将字符串解析为十进制,以便它适用于两种格式 - w /逗号和句点?

[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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

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

Tho*_*que 7

你可以尝试:

private decimal Parse(string s){
  s = s.Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
  return decimal.Parse(s,NumberStyles.Any,
    CultureInfo.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)

  • 确实是@Groo,但如果逗号和点都应该以同样的方式处理,我看不出他如何支持千位分隔符...... (3认同)

Bat*_*mer 5

这个怎么样?

private static decimal Parse(string s)
    {
        s = s.Replace(",", ".");
        return decimal.Parse(s);
    }
Run Code Online (Sandbox Code Playgroud)

  • 自己尝试:1.000.000,25和1000000.25 (6认同)

Roj*_*uck 1

您应该通过在解析逗号小数字符串之前将货币小数分隔符修改为逗号来获得所需的结果。这里有一些食物资源:

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

哦,或者你可以做一个肮脏的黑客,简单地用“.”对“,”进行字符串替换。;)