How to Format Numbers as Strings in C# (e.g., 5.000.000,00)
Formatting numbers with thousand separators and decimals is a common task in C#, especially for applications targeting regions where periods (.
) denote thousands and commas (,
) represent decimals. Let’s break down how to turn a number like 5000000,00
into 5.000.000,00
—step by step, with no jargon.
The Goal: Convert a number like 5000000,00 into 5.000.000,00 in C#.
Step 1: Use NumberFormatInfo
to Customize Formatting
C#’s NumberFormatInfo
class lets you define how numbers are formatted. Here’s how to set it up:
// Create a custom format provider var format = new System.Globalization.NumberFormatInfo(); format.NumberDecimalSeparator = ","; // Use commas for decimals format.NumberGroupSeparator = "."; // Use periods for thousands format.NumberGroupSizes = new[] { 3 }; // Group digits in thousands
Step 2: Apply the Format to Your Number
Use ToString()
with the N
format specifier and your custom NumberFormatInfo
:
double number = 5000000.00; string formattedNumber = number.ToString("N2", format); // Output: "5.000.000,00"
"N2"
: Formats the number with 2 decimal places.format
: Applies your custom separators.
Full Example
using System; using System.Globalization; class Program { static void Main() { double number = 5000000.00; // Define custom formatting var format = new NumberFormatInfo { NumberDecimalSeparator = ",", NumberGroupSeparator = ".", NumberGroupSizes = new[] { 3 } }; // Format the number string result = number.ToString("N2", format); Console.WriteLine(result); // Output: 5.000.000,00 } }
Why Not Use Existing Cultures?
Some cultures (e.g., de-DE
for German) use commas for decimals, but their thousand separators might be spaces or other characters. Creating a custom NumberFormatInfo
ensures consistency.
Common Pitfalls
Forgetting
NumberGroupSizes
: Without setting this, the grouping won’t work.Mixing Decimal and Group Separators: Ensure they’re distinct (e.g.,
.
for thousands,,
for decimals).Hardcoding Values: Always use
NumberFormatInfo
for flexibility across regions.
Alternative: Use CultureInfo
(If Compatible)
If a culture like "es-ES"
(Spanish-Spain) matches your needs, you can use it directly:
double number = 5000000.00; string formatted = number.ToString("N2", CultureInfo.GetCultureInfo("es-ES")); // Output: 5.000.000,00
Final Code Snippet
// Quick formatting for 5.000.000,00 var formatted = 5000000.00.ToString("N2", new NumberFormatInfo { NumberDecimalSeparator = ",", NumberGroupSeparator = ".", NumberGroupSizes = new[] { 3 } });
By customizing NumberFormatInfo
, you control exactly how numbers appear. This approach is clean, flexible, and works globally! 🌍
Post a Comment