将逗号添加到带有.NET 2.0的文本字符串中的十进制数字

时间:2009-09-24 18:24:14

标签: c# string parsing formatting c#-2.0

问候。

想象一下,你被给了一个字符串(来自某个你无法控制的地方)。在该字符串中是十进制数。您希望将逗号(即:将1234567.89转换为1,234,567.89)添加到该数字,同时保持整个字符串不变。数字前的货币符号会有所不同,但逗号格式不一定因文化而异。

在.NET中有一种简单的方法吗?

如果没有简单的方法,我会进一步详细说明我的计划。我们可以使用string.Substring()来获取数字,因为它总是在一些静态文本之间。例如:

我们的字符串:

string s1 = "Blah Blah Blah. Total price: $1234567.89; Blah Blah Blah Blah"

我们可以得到这样的价格:

int start = s1.IndexOf("Total price: ") + 13;
int length = s1.IndexOf(";") - start;
string trim = s1.Substring(start, length);

抓住货币角色,剩下的就是:

char curr = trim[0];
string sAmount = s1.Substring(1, s1.Length);

现在我们可以格式化我们的小数:

decimal dAmount;
if (decimal.TryParse(sAmount, out dAmount))
{
   string formattedPrice = curr + dAmount.ToString("N2");
   Console.WriteLine(formattedPrice);
}

现在我可以将结果字符串插回原来的字符串中。写这个问题的关键是这对我来说非常讨厌,我希望找到一个更好的方法来解决这个问题。

感谢您的时间。我将在接下来的一个小时内对此进行更新,并将在该时间内选择答案。

4 个答案:

答案 0 :(得分:5)

string input = "Blah Blah Blah. Total price: $1234567.89; Blah Blah Blah Blah";

string output = Regex.Replace(input, @"\d+(\.\d\d)?", match => decimal.Parse(match.Value).ToString("N"));

答案 1 :(得分:2)

尝试这样的事情:

String.Format("Total Price: {0:C}", dAmount);
编辑:对不起,喝太多咖啡,快读。以上是如何将逗号/货币符号插入数字的答案。

要回答有关将新数字重新插入旧字符串的问题,正则表达式可能最适合识别字符串中的数字,以及在完成格式化后替换它。我想我需要看到更多有效输入的例子来帮助实际的正则表达式。

答案 2 :(得分:2)

您可能希望查看System.Globalization命名空间。

您可以修剪非数字的开头和尾随字符,然后根据 System.Globalization.CultureInfo.CurrentCulture.NumberFormat 等格式化字符串。

答案 3 :(得分:1)

简单的方法是使用正则表达式来查找和替换。

相关问题