问题
I'm trying to use String.Format("{0:c}", somevalue) in C# but am having a hard time figuring out how to configure the output to meet my needs. Here are my needs:
- 0 outputs to blank
- 1.00 outputs to $1.00
- 10.00 outputs to $10.00
- 100.00 outputs to $100.00
- 1000.00 outputs to $1,000.00
I've tried String.Format("{0:c}", somevalue) but for zero values it outputs $0.00 which is not what I want. I've also tried String.Format("{0:$0,0.00;$(0,0.00);#}", somevalue), but for 1.0 it outputs $01.00. String.Format("{0:$0.00;$(0.00);#}", somevalue) works for most cases, but when somevalue is 1000.00 the output is $1000.00.
Is there some format that will fit all 5 cases above? All of the documentation I've read only details the basics and doesn't touch on this type of scenario.
回答1:
If you use
string.Format("{0:$#,##0.00;($#,##0.00);''}", value)
You will get "" for the zero value and the other values should be formatted properly too.
回答2:
Try something like this:
String currency = (number == 0) ? String.Empty : number.ToString("c");
回答3:
Depending on if you are consistently using the same data type for all of your currency values, you could write an extension method that would make it so that your case is always met. For example if you were using the decimal type:
public static string ToCurrencyString (this decimal value)
{
if (value == 0)
return String.Empty;
return value.ToString ("C");
}
回答4:
Here's a great reference that you might find useful, which summarises this data: http://blog.stevex.net/string-formatting-in-csharp/
回答5:
The "C" currency formats are great until you need a blank for 0. Here are two ways, one mentioned above, similar to the ones that I use that give you the blank for 0:
// one way
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue)
// another way
somevalue.ToString("$#,##0.00;($#,##0.00);''")
The second technique feels more "fluent", if you like that style of code (as I do).
来源:https://stackoverflow.com/questions/542690/need-a-custom-currency-format-to-use-with-string-format