将字符串解析为小数、逗号和句号
本文关键字:小数 字符串 | 更新日期: 2023-09-27 17:54:44
如何将字符串解析为十进制,使其适用于两种格式- 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);
}
输出:Test 'Unit.Sandbox.foo' failed: Assert.Equal() Failure
Expected: 11
Actual: 1,1
你可以试试:
private decimal Parse(string s){
s = s.Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
return decimal.Parse(s,NumberStyles.Any,
CultureInfo.InvariantCulture);
}
这个怎么样?
private static decimal Parse(string s)
{
s = s.Replace(",", ".");
return decimal.Parse(s);
}
在对逗号十进制字符串进行解析之前,应该将Currency十进制分隔符修改为逗号,从而得到所需的结果。这里有一些食物资源:
http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencydecimalseparator.aspx Y888
你也可以像这里讨论的那样实现你自己的formatprovider:
http://msdn.microsoft.com/en-us/library/t7xswkc6.aspxhttp://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx
哦,或者你可以做一个肮脏的hack,简单地运行一个字符串替换","与"。"div;)
如果您使用的是英语操作系统,该方法将带逗号的十进制数转换为点。如果您使用俄语,该方法将带点的十进制数转换为逗号。
Console.Write("Input number: ");
string? input = Console.ReadLine();
decimal number = ConvertNumberToCurrentLocale(input);
Console.WriteLine("Result: " + number);
decimal ConvertNumberToCurrentLocale(string? input)
{
string separator = Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator;
switch (separator)
{
case ".":
input = input?.Replace(",", ".");
break;
case ",":
input = input?.Replace(".", ",");
break;
}
decimal.TryParse(input, out var number);
return number;
}