如何将格式化的字符串保存到字符串变量中?

时间:2012-12-31 15:47:17

标签: c# string formatting currency string.format

我正在创建一个应该为的C#方法 1.串入字符串 2.将该字符串格式化为货币(无小数或分数)并将其返回为

String.Format非常适合格式化,但它的格式仅在打印或输出值时适用。当我单步执行代码时,我可以清楚地看到实际保存的值进入字符串没有格式化。但我需要它格式化。那就是你需要帮助的地方。

在上面的步骤1中,输入的字符串将属于3种可能格式之一。 (下面,我使用"指定字符串的开头和结尾。"实际上不是字符串的一部分。)

1."< 5000"
2." 5000-10000"
3."> 10000"

对于这3个例子,该方法应该输出
1."< $ 5,000"
2." $ 5,000 - $ 10,000"
3."> $ 10,000"

基本上,该方法应该添加$和,如果需要(String.Format做得很好)。其余的格式设置,例如添加<,>或 - 很容易。我可以制定一种方法来手动执行此操作,但必须更容易!

3 个答案:

答案 0 :(得分:7)

为了确保您 在某处分配String.Format的结果,对吧?

string result = String.Format("<{0}>", 123);

.NET中的字符串是不可变的,因此函数总是创建新字符串而不是修改现有字符串。此外,“打印和输出”绝不是神奇的,所以当一个函数的结果输出后,它不可能表现得不同。

答案 1 :(得分:6)

string.Format不会修改字符串,但会返回一个全新的实例。您可以通过以下方式将其分配给变量:

var newString = string.Format("{0} is my format", oldString);

如果您只有原始字符串而不是其中的值,则可以使用Regex解决问题。这仅适用于您带来的三个示例,但您可以通过更改模式来调整它。

编辑:我注意到它不会应用逗号,但您可以尝试修改模式以匹配您想要的输出。现在它可以按照作者的要求运行。

string[] samples =
{
    "<5000",
    "5000-10000",
    ">10000"
};
var results = samples.
    Select(s => Regex.Replace(s, @"\d+",
        m => Convert.ToInt32(m.Value).ToString("$#,#"))).
    ToArray();

答案 2 :(得分:0)

(从我的评论中复制)

如果你已经有了一个字符串变量,我们称之为s,说:

string.Format( /* something with s in it */ )

不会更改s本身。您可能需要重新分配,如

s = string.Format( /* something with s in it */ )

在右侧使用“旧”s对象,然后Format的结果“保存”到s并成为新{{1} }}

但请注意,s无法将字符串格式化为货币。它可以将数字(如String.Formatdecimal)格式化为货币,但是一旦有字符串,就不会有double或{{1将帮助改变字符串输出。