Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom numeric format string to always display the sign

People also ask

What does ## represent in a string?

'#' represents an optional digit place that will not appear in case of a 0 digit in that position, whereas 0 means the digit will always appear.

How do I format a numeric string in Python?

You can use the str. format() to make Python recognize any objects to strings.

What is string format () used for?

In java, String format() method returns a formatted string using the given locale, specified format string, and arguments. We can concatenate the strings using this method and at the same time, we can format the output concatenated string.


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.


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

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

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}";

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

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).