Custom numeric format string to always display the sign

C#.NetFormattingString Formatting

C# Problem Overview


Is there any way I can specify a standard or custom numeric format string to always output the sign, be it +ve or -ve (although what it should do for zero, I'm not sure!)

C# Solutions


Solution 1 - C#

Yes, you can. There is conditional formatting. See Conditional formatting in MSDN

eg:

string MyString = number.ToString("+0;-#");

Where each section separated by a semicolon represents positive and negative numbers

or:

string MyString = number.ToString("+#;-#;0");

if you don't want the zero to have a plus sign.

Solution 2 - C#

Beware, when using conditional formatting the negative value doesn't automatically get a sign. You need to do

string MyString = number.ToString("+#;-#;0");

Solution 3 - C#

You can also use format strings in string.Format(); the format string is separated from the index with a colon (':')

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

For number { +1, -1, 0 } this gives:

>1, Force sign +1, No sign for zero +1
-1, Force sign -1, No sign for zero -1
0, Force sign +0, No sign for zero 0

You can also use an interpolated string instead of string.Format to obtain the same result:

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

Solution 4 - C#

Contrary to the other answers it seems that if you want to get +1, -1, +0 (for arguments 1, -1, 0) you need to use the format:

String.Format("{0:+#;-#;+0}", 0));  // output: +0

or

String.Format("{0:+0;-#}", 0));  // output: +0

If you use just +#;-# it will display just + (not +0) for 0.

The "#" Custom Specifier (at https://msdn.microsoft.com/en-us/library/0c899ak8.aspx)

> Note that this specifier never displays a zero that is not a significant digit, even if zero is the only digit in the string. It will display zero only if it is a significant digit in the number that is being displayed.

Also please keep in mind that if you need any decimal precision you need to specify it like that:

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

or, if you wan't zeros to always show up, like that:

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

Solution 5 - C#

For a numeric expression of any type:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

Use three parts for three cases: positive;negative;zero

Other aspects of the example:

  • Zero is not signed. You could have it show as anything, such as "zero".

  • Absolute values less than one have a leading 0 before the decimal point. Adjust to taste.

  • Number of digits is for the largest and smallest absolute decimal values. Adjust to taste.

  • Decimal point character is culture-specific. .NET substitutes.

  • Grouping separators are optional. The character is culture-specific. .NET substitutes. (The positions are also culture-specific but that's only controlled by your format string.) You also use any other character except the special characters for Format (which include , . # 0).

Solution 6 - C#

I cannot comment so i Do an answer here (nuts reputation system ....)

You can Use number.ToString("+0;-#") very well to Produce the UTC String TimeFormat

Here showed in PowerShell code

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

Thank you @gcores https://stackoverflow.com/users/40256/gcores

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCraig ShearerView Question on Stackoverflow
Solution 1 - C#gcoresView Answer on Stackoverflow
Solution 2 - C#LukView Answer on Stackoverflow
Solution 3 - C#EdwardView Answer on Stackoverflow
Solution 4 - C#Kamil SzotView Answer on Stackoverflow
Solution 5 - C#Tom BlodgetView Answer on Stackoverflow
Solution 6 - C#Peter KriegelView Answer on Stackoverflow