Class DecimalFormat

All Implemented Interfaces:
Serializable, Cloneable

public class DecimalFormat extends NumberFormat

Formats and parses decimal numbers according to a pattern.

Pattern syntax

A pattern is a positive subpattern, optionally followed by ; and a negative subpattern of which only the prefix and suffix are used. Each subpattern is a prefix, a number and a suffix. In the number:

  • 0 is a digit that is always written, # a digit written only when it is significant.
  • . is the decimal separator and , the grouping separator; the distance from the last , to the end of the integer part is the group size.
  • E followed by one or more 0 selects scientific notation, with at least that many exponent digits. With more integer digit positions than 0s among them (##0.###E0), the exponent is kept a multiple of the number of integer positions.

In a prefix or suffix, % multiplies the number by 100 and writes a percent sign, the per mille sign multiplies by 1000, the currency sign writes the currency symbol (doubled, the international currency code), and - writes the minus sign. A single quote makes the characters up to the next one literal, and two in a row stand for one quote.

The characters actually written -- separators, minus, percent, currency -- come from the format's DecimalFormatSymbols.

Rounding

Rounding is half-even, the JDK default, and like the JDK it is decided by the exact binary value of a double: 0.125 is a true tie and formats as 0.12 under 0.00, while 0.15, which as a double lies just below the decimal 0.15, formats as 0.1 under 0.0.

The JDK departs from half-even in two places, and so does this class, because a last digit that differs from the desktop's is worse than either answer: a whole number rounds a tie up in scientific notation (12345 under 0.###E0 is 1.235E4), and 5E-4, 5E-5 and so on round down when the 5 is the first digit dropped (0.0005 under 0.000 is 0.000).

Differences from the JDK
  • No setRoundingMode, setCurrency, setParseBigDecimal or formatToCharacterIterator: the device has none of the types they name.
  • No localized patterns (applyLocalizedPattern, toLocalizedPattern).
See Also:
  • Constructor Details

    • DecimalFormat

      public DecimalFormat()
    • DecimalFormat

      public DecimalFormat(String pattern)
    • DecimalFormat

      public DecimalFormat(String pattern, DecimalFormatSymbols symbols)
  • Method Details

    • format

      public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition)
      Specified by:
      format in class NumberFormat
    • format

      public StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition)
      Specified by:
      format in class NumberFormat
    • parse

      public Number parse(String text, ParsePosition pos)
      Description copied from class: NumberFormat
      Parses a number starting at parsePosition, which is advanced past what was read. On failure the position is left alone, its error index is set, and null is returned. The result is a Long when the text is a whole number that fits one, and a Double otherwise.
      Specified by:
      parse in class NumberFormat
    • applyPattern

      public void applyPattern(String pattern)
    • toPattern

      public String toPattern()
      A pattern that produces this format. It is equivalent to the pattern that was applied, not necessarily the same text: 0.00 comes back as #0.00.
    • getDecimalFormatSymbols

      public DecimalFormatSymbols getDecimalFormatSymbols()
      A copy of the symbols in use; changing it changes nothing until it is passed to setDecimalFormatSymbols(DecimalFormatSymbols).
    • setDecimalFormatSymbols

      public void setDecimalFormatSymbols(DecimalFormatSymbols newSymbols)
    • getPositivePrefix

      public String getPositivePrefix()
    • setPositivePrefix

      public void setPositivePrefix(String newValue)
    • getNegativePrefix

      public String getNegativePrefix()
    • setNegativePrefix

      public void setNegativePrefix(String newValue)
    • getPositiveSuffix

      public String getPositiveSuffix()
    • setPositiveSuffix

      public void setPositiveSuffix(String newValue)
    • getNegativeSuffix

      public String getNegativeSuffix()
    • setNegativeSuffix

      public void setNegativeSuffix(String newValue)
    • getMultiplier

      public int getMultiplier()
    • setMultiplier

      public void setMultiplier(int newValue)
    • getGroupingSize

      public int getGroupingSize()
    • setGroupingSize

      public void setGroupingSize(int newValue)
    • isDecimalSeparatorAlwaysShown

      public boolean isDecimalSeparatorAlwaysShown()
    • setDecimalSeparatorAlwaysShown

      public void setDecimalSeparatorAlwaysShown(boolean newValue)
    • clone

      public Object clone()
      A copy of this format. Written out field by field: Object.clone() answers null on the device for anything but an array.
      Specified by:
      clone in class NumberFormat
    • equals

      public boolean equals(Object obj)
      Description copied from class: Object
      Indicates whether some other object is "equal to" this one. The equals method implements an equivalence relation: It is reflexive: for any reference value x, x.equals(x) should return true. It is symmetric: for any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. It is transitive: for any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. It is consistent: for any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the object is modified. For any non-null reference value x, x.equals(null) should return false. The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
      Overrides:
      equals in class NumberFormat
    • hashCode

      public int hashCode()
      Description copied from class: Object
      Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables. As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
      Overrides:
      hashCode in class NumberFormat