Numeric formatting question
-
In the following String.Format call it will format a number to 6 zero-padded digits, prepend the plus or minus sign and then pad with a space on the left to 8 characters:
String.Format({0,8:+000000;-000000}, num);
// result is of the form " +002009" What format string can I use to format a number to 7 space-padded digits and prepend the plus or minus sign before the spaces? I am looking for something like"+ 2009"
BethThe best thing to do in this scenario is to create your own customer formatter and then pass it in as an argument. String.Format(formatProvider, formatString, arguments). I have found this to be the only good way when dealing with phone numbers which may have bad data and I am sure it will provide you with that you need. http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx[^]
Need custom software developed? I do C# development and consulting all over the United States. A man said to the universe: "Sir I exist!" "However," replied the universe, "The fact has not created in me A sense of obligation." --Stephen Crane
-
Glad to be of service. I was also just looking for a solution using my ApplyFormat[^] method, but no joy. I had hoped that this would do it:
System.Console.WriteLine ( 2009.ApplyFormat ( "' '+;-''#####0;#####0" ) ) ;
System.Console.WriteLine ( (-2009).ApplyFormat ( "' '+;-''#####0;#####0" ) ) ;Apparently the number sign (#) format character doesn't perform padding. :mad: (Apparently its only purpose is to result in an empty string when the value is zero. Yeah, like that's useful. :rolleyes: ) I guess that means I can add more functionality to my method to support it. Yippee, something to do.
-
Will this suit the need? :-D
System.Console.WriteLine ( "{0,1: + ; - }{0,7 : 0 ; 0 }" , 2009 ) ;
System.Console.WriteLine ( "{0,1: + ; - }{0,7 : 0 ; 0 }" , -2009 ) ;(SPACEs added to avoid smileys; remove them.) (Third try.)
modified on Friday, February 27, 2009 1:55 PM
PIEBALDconsult wrote:
SPACEs added to avoid smileys; remove them.
Whenever 4 or more spaces are present use t:)a:)b:)s
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Sunday, June 12, 2011 8:46 AM
-
PIEBALDconsult wrote:
SPACEs added to avoid smileys; remove them.
Whenever 4 or more spaces are present use t:)a:)b:)s
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Sunday, June 12, 2011 8:46 AM
I didn't want any SPACEs in the format at all.
-
Glad to be of service. I was also just looking for a solution using my ApplyFormat[^] method, but no joy. I had hoped that this would do it:
System.Console.WriteLine ( 2009.ApplyFormat ( "' '+;-''#####0;#####0" ) ) ;
System.Console.WriteLine ( (-2009).ApplyFormat ( "' '+;-''#####0;#####0" ) ) ;Apparently the number sign (#) format character doesn't perform padding. :mad: (Apparently its only purpose is to result in an empty string when the value is zero. Yeah, like that's useful. :rolleyes: ) I guess that means I can add more functionality to my method to support it. Yippee, something to do.
-
From my experimentation it seems like the number sign (#) is only useful when specifying the location of a special character, like a comma, such as in String.Format("0:###,###,###").
Ah, that too. Darn, there needs to be another option, like '9' to specify left-padding. I've forgotten everything I learned about COBOL, so I forget how this was handled in it.
-
The best thing to do in this scenario is to create your own customer formatter and then pass it in as an argument. String.Format(formatProvider, formatString, arguments). I have found this to be the only good way when dealing with phone numbers which may have bad data and I am sure it will provide you with that you need. http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx[^]
Need custom software developed? I do C# development and consulting all over the United States. A man said to the universe: "Sir I exist!" "However," replied the universe, "The fact has not created in me A sense of obligation." --Stephen Crane
It just might come to that. :sigh:
-
Ah, that too. Darn, there needs to be another option, like '9' to specify left-padding. I've forgotten everything I learned about COBOL, so I forget how this was handled in it.
PIEBALDconsult wrote:
I've forgotten everything I learned about COBOL, so I forget how this was handled in it.
You can fix that easily by following some links at the bottom[^]. :)
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
-
PIEBALDconsult wrote:
I've forgotten everything I learned about COBOL, so I forget how this was handled in it.
You can fix that easily by following some links at the bottom[^]. :)
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
I already did some searching; I now know almost as much about COBOL as I used to. :-D
-
From my experimentation it seems like the number sign (#) is only useful when specifying the location of a special character, like a comma, such as in String.Format("0:###,###,###").
IIRC it also lets you pad to the right of a decimal. Unfortunately I don't know how to pad to the left.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots. -- Robert Royall
-
IIRC it also lets you pad to the right of a decimal. Unfortunately I don't know how to pad to the left.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots. -- Robert Royall
I appears that the formats themselves don't pad (other than with zeroes), that padding is handled by the
WriteLine
,string.Format
, etc. that calls it. I assume that the creators of the formatters decided that if the caller was going to do the padding, then they didn't need to. Which makes sense, but there are cases when the caller isn't going to do the padding so the formatter should be able to. Because my ApplyFormat method is a caller of formatting, I now have to decide how best to allow the user to specify padding. I'm thinking I should follow Microsoft's lead and allow the format to be prefixed with "n:" to specify a minimum width of n characters. -
In the following String.Format call it will format a number to 6 zero-padded digits, prepend the plus or minus sign and then pad with a space on the left to 8 characters:
String.Format({0,8:+000000;-000000}, num);
// result is of the form " +002009" What format string can I use to format a number to 7 space-padded digits and prepend the plus or minus sign before the spaces? I am looking for something like"+ 2009"
BethI have added padding support to my ApplyFormat method, so now
2009.ApplyFormat ( "' '+;-''6 : 0 ;0" )
will do that. But now I want to cache the interpretation of the format specifier to streamline things a bit, so I'm not yet ready to update the article.modified on Saturday, February 28, 2009 6:26 PM
-
Will this suit the need? :-D
System.Console.WriteLine ( "{0,1: + ; - }{0,7 : 0 ; 0 }" , 2009 ) ;
System.Console.WriteLine ( "{0,1: + ; - }{0,7 : 0 ; 0 }" , -2009 ) ;(SPACEs added to avoid smileys; remove them.) (Third try.)
modified on Friday, February 27, 2009 1:55 PM
-
The original code was mangled because of fixes required for smileys. Here is the correct code:
System.Console.WriteLine ( "{0 , 1 : + ; -}{0 , 7 : -O ; 0}" , 2009 ) ;
System.Console.WriteLine ( "{0 , 1 : + ; -}{0 , 7 : -O ; 0}" , -2009 ) ;What I posted works fine for me (once the SPACEs are removed).