C# String Formatting FAQ
My String Formatting in C# article has been one of the most popular on this site for the last two years, and it's received dozens of comments. Many of these were additional formatting questions, or answers to those questions. This article is a round-up of those comments - all credit to the original commenters, whose comments are on the original article.
Q: |
How do I show numbers with 5 fixed digits with leading zeroes |
A: |
int _num1 = 123; int _num2 = 45; int _num3 = 123456; String.Format("{0:00000}", _num1); //"00123" String.Format("{0:00000}", _num2); //"00045" String.Format("{0:00000}", _num3); //"123456" String.Format("{0:d5}", _num1); //"00123" String.Format("{0:d5}", _num2); //"00045" String.Format("{0:d5}", _num3); //"123456" |
Q: |
Can I substitute a string for a value? |
A: |
Yes: String.Format("{0:yes;;no}", value) This will print "no" if value is 0, "yes" if value is 1. |
Q: |
What's the most efficient way to convert a type into a string? |
A: |
Double testDouble = 19.95; String testString1 = String.Format("{0:C}", testDouble); // Boxing operation required. String testString2 = testDouble.ToString(”C”); // No boxing operation required. |
Q: |
How can I format as percentage without having the number multiplied by 100? |
A: |
Put a single quote (’) before the % in the format string. myString.Format("{0:##.00′%", 1.23); This will yield "1.23%". |
Q: |
Can I convert a number with a thousand separator to an int? |
A: |
Yes - no matter what thousand separator is in use for your locale. int x = int.Parse("1,345"); // fails int x = int.Parse("1,345",System.Globalization.NumberStyles.AllowThousands) This gives you an x of 1345. |
Q: |
How can I use curly brackets within a formatted number? |
A: |
Yes - doubling them escapes them. For example: string.format("{{SomeString}}={0}","Hello"); |
Q: |
How can I convert from currency back to a number? |
A: |
You can add the bitmapped values of the Globalization.NumberStyles enumeration. // format double to currency str = string.Format("{0:c}", pmt); // parse currency formatted string to double double.Parse(str, Globalization.NumberStyles.AllowCurrencySymbol + Globalization.NumberStyles.AllowDecimalPoint + Globalization.NumberStyles.AllowThousands); |
Q: |
So what do google ads G Strings for men have to do with your site? |
A: |
Ask Google! :) |
Q: |
What's a good way to format currency? |
A: |
double val = 4219.6; str = string.Format("{0:$#,#.00;Call Us;Call Us}", val); This will return "$4,219.60". The .00 will force 2 decimals and the “;Call Us;Call Us” to show the text “Call Us” in place of negative and null values respectively. (Just in case) |
Q: |
How do I format an integer, with commas for thousands? |
A: |
string str = string.Format("{0:#,0}", intValue); |
Q: |
How can I format a phone number to look like 800.555.1212? |
A: |
There's no direct way to do this; however you can get dashes in the output. So you can do this: string tempStr = String.Format(”{0:###-###-####}”, 8005551212); string result =tempStr.Replace(’-',’.'); |