And*_*rko 19 .net c# type-conversion
应用程序处理表示来自不同文化的小数的字符串.例如,"1.1和"1,1"是相同的值.
我玩过Decimal.TryParse
旗帜组合,但无法达到我想要的效果.毕竟"1,1"变为"11"或"0".
是否可以在一行代码中将这些字符串转换为十进制而无需将","char替换为".".还是在玩NumberFormat.NumberDecimalSeparator
?
你如何处理这种情况?
先感谢您!
Jef*_*ado 33
您可以创建CultureInfo
在解析时使用的临时对象.
// get a temporary culture (clone) to modify
var ci = CultureInfo.InvariantCulture.Clone() as CultureInfo;
ci.NumberFormat.NumberDecimalSeparator = ",";
decimal number = decimal.Parse("1,1", ci); // 1.1
Run Code Online (Sandbox Code Playgroud)
Dev*_*per 11
我发现了另一种方法.它看起来很奇怪但它对我来说很好.
因此,如果您不了解目标系统的文化,并且您不知道您将获得12.33或12,33的哪个值,您可以执行以下操作
string amount = "12.33";
// or i.e. string amount = "12,33";
var c = System.Threading.Thread.CurrentThread.CurrentCulture;
var s = c.NumberFormat.CurrencyDecimalSeparator;
amount = amount.Replace(",", s);
amount = amount.Replace(".", s);
decimal transactionAmount = Convert.ToDecimal(amount);
Run Code Online (Sandbox Code Playgroud)
你只需要在调用时设置正确的文化Parse
,就像这样:
string s = "11,20";
decimal c1 = decimal.Parse(s, new CultureInfo("fr-FR"));
decimal c2 = decimal.Parse(s, new CultureInfo("en-AU"));
Console.WriteLine(c1);
Console.WriteLine(c2);
Run Code Online (Sandbox Code Playgroud)
您有以下可能性: