我正在创建一个应该为的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
做得很好)。其余的格式设置,例如添加<,>或 - 很容易。我可以制定一种方法来手动执行此操作,但必须更容易!
答案 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.Format
或decimal
)格式化为货币,但是一旦有字符串,就不会有double
或{{1将帮助改变字符串输出。