An Exponential Number Format

The DecimalFormat class is useful for medium-sized numbers, but it doesn’t work very well for exceptionally large numbers like Avogadro’s number (6,022,094,300,000,000,000,000,000) or exceptionally small numbers like Planck’s constant (0.00000000000000000000000000625 erg-seconds). These are traditionally written in scientific notation as a decimal number times 10 to a certain power, positive or negative; for example, 6.0220943 × 1023 and 6.25 × 10-27 erg-seconds. In most programming languages, including Java, an E followed by either a + or a - is used to represent “× 10 to the power”; for example, 6.0220943E+23 or 6.25E-27 erg-seconds.

The java.text package does not provide support for formatting numbers in scientific notation,[32] so as the final example of this chapter, I’ll develop a new subclass of NumberFormat that does use scientific notation. Technically, scientific notation requires exactly one nonzero digit before the decimal point, but I’ll be a little more general than that, providing for numbers like 13.2E-8 as well.

The NumberFormat class is abstract. It declares three abstract methods any subclass must implement:

public abstract StringBuffer format(double number, StringBuffer toAppendTo, 
                                    FieldPosition pos)
public abstract StringBuffer format(long number, StringBuffer toAppendTo, 
                                    FieldPosition pos)
public abstract Number parse(String text, ParsePosition parsePosition)

The two format methods must format a long and a double respectively, update ...

Get Java I/O now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.