0

我正在创建一个 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做得很好)。其余的格式,如添加 <、> 或 - 很容易。我可以制作一种手动执行此操作的方法,但必须有一种更简单的方法!

4

3 回答 3

7

只是为了确保您正在分配String.Format某个地方的结果,对吗?

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

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

于 2012-12-31T15:49:22.683 回答
6

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

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

你可以用 a 解决你的问题Regex,以防你只有原始字符串而不是它们里面的值。这仅适用于您带来的三个示例,但您可以通过更改模式来适应它。

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

string[] samples =
{
    "<5000",
    "5000-10000",
    ">10000"
};
var results = samples.
    Select(s => Regex.Replace(s, @"\d+",
        m => Convert.ToInt32(m.Value).ToString("$#,#"))).
    ToArray();
于 2012-12-31T15:48:42.227 回答
0

(copied from my comment)

If you already have a string variable, let's call it s, saying:

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

will not change s itself. You might want to reassign, as in

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

where on the right-hand side the "old" s object is used, and the result of Format is then "saved" to s and becomes the new s.

But note that String.Format cannot format a string as currency. It can format a number (like a decimal or a double) as a currency, but once you have string, no format like {0:C} or {0:C0} will help change the string output.

于 2013-01-01T02:26:18.040 回答