Collapsing Zeros

Classic programmed-learning exercises, refreshed for modern Java and presented in the current MrStyner.com portfolio style.

Modern Java noteThis archive has been refreshed for Java 25 LTS. Core language concepts remain useful, while outdated setup instructions and browser-era Java are labeled or replaced. Java 26 is the current feature release; Java 25 is used here as the stable teaching baseline.
go to previous page   go to home page   go to next page        
double A= 0.1, B= -0.1;
DecimalFormat numform = new DecimalFormat(" 000.000;-000.000");
System.out.println( "A = " + numform.format(A) );
System.out.println( "B = " + numform.format(B) );

Answer:

A =  000.100
B = -000.100

Collapsing Zeros

The output is somewhat unsatisfactory. It would look better without the leading and trailing zeros

Use the character # in the format string to show a digit that will be omitted from the output string if it is a leading or trailing zero.

For integers: the pattern has two halves. It starts with any number of #s, followed by one or more 0s. Here are some legal patterns:

####0 
###00 
##0 
000
###0

For floating point: The integer part of the pattern follows the rules for integers. If a decimal point is included, the pattern for the fraction has two halves: it starts with any number of 0s followed by any number of #s. Here are some legal patterns:

####0.##
###00.##
##0.00##
##0.000
000
###0
##0.

Here are some illegal patterns:

####        ---  needs to end with at least one 0
###.##      ---  integer part needs to end with a 0
##0.0##00   ---  bad fractional part (can't surround #s with 0s)
##00##      ---  bad integer pattern
###0.##0    ---  bad fractional part

Usually format() produces a reasonable string, even with defective format patterns. But seriously defective patterns cause it to throw an IllegalArgumentException at run time. The compiler does not inspect the format patterns.

QUESTION 15:

Is the following format string correct?

000.###