Formatting Negative Numbers Differently Than Positive | CodeGuru

Formatting Negative Numbers Differently Than Positive

Environment: .NET In my last article, I presented formatting specifiers for dates and times. Format specifiers are most often used with numbers. For example, to print a decimal number to three levels of precision, you would use D3 as the specifer. The following uses this specifier within WriteLine: System.Console.WriteLine(“A Number: {0:D3}”, dVar); While numeric specifiers […]

Written By
CodeGuru Staff
CodeGuru Staff
Jan 29, 2003
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: .NET

In my last article, I presented formatting specifiers for dates and times. Format specifiers are most often used with numbers. For example, to print a decimal number to three levels of precision, you would use D3 as the specifer. The following uses this specifier within WriteLine:

System.Console.WriteLine("A Number: {0:D3}", dVar);

While numeric specifiers work with both positive and negative numbers, there are times when you want a negative number treated differently than a positive number.

The placeholder for specifying the format of a value can actually be separated into either two or three sections. If the placeholder is separated into two sections, the first is for positive numbers and zero and the second is for negative numbers. If it is broken into three sections, the first is for positive values, the middle is for negative values, and the third is for zero.

The placeholder is broken into these sections using a semicolon. The placeholder number is then included in each. For example, to format a number to print with three levels of precision when positive, five levels when negative, and no levels when zero, you do the following:

{0:D3;D5;'0'}

Listing 1 presents this example in action along with a couple of additional examples.

Listing 1 — threeway.cs.

 1: // threeway.cs - Controlling the formatting of numbers
 2: //----------------------------------------------------
 3:
 4: using System;
 5:
 6: class myApp
 7: {
 8:  public static void Main()
 9:  {
10:    Console.WriteLine("nExample 1...");
11:    for ( int x = -100; x <= 100; x += 100 )
12:    {
13:      Console.WriteLine("{0:000;-00000;'0'}", x);
14:    }
15:
16:    Console.WriteLine("nExample 2...");
17:    for ( int x = -100; x <= 100; x += 100 )
18:    {
19:      Console.WriteLine("{0:Pos: 0;Neg: -0;Zero}", x);
20:    }
21:
22:    Console.WriteLine("nExample 3...");
23:    for ( int x = -100; x <= 100; x += 100 )
24:    {
25:      Console.WriteLine("{0:You Win!;You Lose!;You Broke
                               Even!}", x);
26:    }
27:  }
28: }

This listing produces the following output:

Example 1...
-00100
0
100

Example 2...
Neg: -100
Zero
Pos: 100

Example 3...
You Lose!
You Broke Even!
You Win!

This listing helps illustrate how to break the custom formatting into three pieces. A for loop is used to create a negative number, increment the number to zero, and finally increment it to a positive number. The result is that the same WriteLine can be used to display all three values. This is done three separate times for three different examples.

In line 13, you see that the positive value will be printed to at least three digits because there are three zeros in the first formatting position. The negative number will include a negative sign followed by at least 5 numbers. You know this because the dash is included in the format for the negative sign, and there are five zeros. If the value is equal to zero, a zero will be printed.

In the second example, text is included with the formatting of the numbers. This is also done in the third example. The difference is that in the second example, zero placeholders are also included so the actual numbers will print. This is not the case with the third example where only text is displayed.

As you can see by all three of these examples, it is easy to cause different formats to be used based on the sign (positive or negative) of a variable.

For More Information…

Check out my previous article on formatting dates and times. Additionally, you can get more information from my book, Sams Teach Yourself C# in 21 Days.

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.