我正在开发一个C#应用程序。我想用逗号(,)改变数字十进制数字,其中我有点(。)使用正则表达式。
例如:
Price= 100,00.56
作为表示数值的国际规则,但我瑞典他们有不同的数字方式,如
Price= 100.00,56
所以我想使用RegEx将点(。)改为逗号(,)和逗号(,)改为点(。)。可以指导我这个。
答案 0 :(得分:24)
格式化数字时,您应该使用带有string format overload对象的CultureInfo
。瑞典语的文化名称是“sv-SE”,可以看出here。
decimal value = -16325.62m;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("sv-SE")));
修改强>:
正如@OregonGhost所指出的那样 - 解析数字也应该用CultureInfo
完成。
答案 1 :(得分:5)
不确定100,00.56代表什么,你的意思是10.000,56?
回答你的问题:
对于这么简单的任务,为什么要使用RegEx?你可以更容易地做到这一点:
string oldValue = "100,00.56";
char dummyChar = '&'; //here put a char that you know won't appear in the strings
var newValue = oldValue.Replace('.', dummyChar)
.Replace(',', '.')
.Replace(dummyChar, ',');
修改的
我同意@Oded,格式化数字使用CultureInfo
类。
答案 2 :(得分:5)
另外看看
System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
答案 3 :(得分:4)
即使没有正则表达式,您也可以这样做。例如
var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");
答案 4 :(得分:4)
不是RegEx解决方案,而是根据我的经验 - 更正确:
public static string CheckDecimalDigitsDelimiter(this string instance)
{
var sv = new CultureInfo("sv-SE");
var en = new CultureInfo("en-US");
decimal d;
return (!Decimal.TryParse(instance, NumberStyles.Currency, sv, out d) &&
Decimal.TryParse(instance, NumberStyles.Currency, en, out d)) ?
d.ToString(sv) : // didn't passed by SV but did by EN
instance;
}
这种方法有什么作用?它确保如果给定的字符串不正确瑞典字符串但是正确的英语 - 将其转换为瑞典语,例如100,00 -> 100,00
但100.00 -> 100,00
。
答案 5 :(得分:3)
不要依赖RegExp这种事情:)使用文化中的构建fx:
decimal s = decimal.Parse("10,000.56", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
string output = s.ToString("N",CultureInfo.GetCultureInfo("da-DK"));
en-US将正确解析它,da-DK使用其他类型的表示。我住在DK,因此使用它,但你应该使用适合你的输出的文化。