8

我正在开发一个 C# 应用程序。我想用逗号(,)更改数字小数,其中我有点(。)使用正则表达式。

例如:

Price= 100,00.56

作为表示数值的国际规则,但我瑞典他们有不同的数字方式

Price= 100.00,56

所以我想使用 RegEx 将 dot(.) 更改为 comma(,) 并将 comma(,) 更改为 dot(.)。可以指导我这件事。

4

6 回答 6

25

格式化数字时,应使用带对象的字符串格式重载CultureInfo。瑞典语的文化名称是“sv-SE”,如图所示

decimal value = -16325.62m;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("sv-SE")));

编辑

正如@OregonGhost 指出的那样 - 解析数字也应该使用CultureInfo.

于 2010-08-04T09:48:48.933 回答
6

不是 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,00but 100.00 -> 100,00

于 2010-08-04T10:00:15.510 回答
5

即使没有正则表达式,您也可以这样做。例如

var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");
于 2010-08-04T09:48:26.203 回答
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该类。

于 2010-08-04T09:50:07.893 回答
5

也看看

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
于 2010-08-04T09:50:33.970 回答
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,因此使用它,但您应该使用适合您输出的文化。

于 2010-08-04T09:54:08.193 回答