public abstract class NumberFormat extends Format
NumberFormat is the abstract base class for all number formats. This class provides the interface for formatting and parsing numbers.
NumberFormat also provides methods for determining which locales have number formats, and what their names are.
NumberFormat helps you to format and parse numbers for any locale. Your code can be completely independent of the locale conventions for decimal points, thousands-separators, or even the particular decimal digits used, or whether the number format is even decimal.
To format a number for the current Locale, use one of the factory class methods:
If you are formatting multiple numbers, it is more efficient to get the format and use it multiple times so that the system doesn't have to fetch the information about the local language and country conventions multiple times.myString = NumberFormat.getInstance().format(myNumber);
To format a number for a different Locale, specify it in the call toNumberFormat nf = NumberFormat.getInstance(); for (int i = 0; i < myNumber.length; ++i) { output.println(nf.format(myNumber[i]) + "; "); }
getInstance.
You can also use aNumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
NumberFormat to parse numbers:
UsemyNumber = nf.parse(myString);
getInstance or
getNumberInstance to get the normal number format. Use
getIntegerInstance to get an integer number format. Use
getCurrencyInstance to get the currency number format. And use
getPercentInstance to get a format for displaying percentages. With this format, a fraction like 0.53 is displayed as 53%.
You can also control the display of numbers with such methods as setMinimumFractionDigits. If you want even more control over the format or parsing, or want to give your users more control, you can try casting the NumberFormat you get from the factory methods to a DecimalFormat. This will work for the vast majority of locales; just remember to put it in a try block in case you encounter an unusual one.
NumberFormat and DecimalFormat are designed such that some controls work for formatting and others work for parsing. The following is the detailed description for each these control methods,
setParseIntegerOnly : only affects parsing, e.g. if true, "3456.78" → 3456 (and leaves the parse position just after index 6) if false, "3456.78" → 3456.78 (and leaves the parse position just after index 8) This is independent of formatting. If you want to not show a decimal point where there might be no digits after the decimal point, use setDecimalSeparatorAlwaysShown.
setDecimalSeparatorAlwaysShown : only affects formatting, and only where there might be no digits after the decimal point, such as with a pattern like "#,##0.##", e.g., if true, 3456.00 → "3,456." if false, 3456.00 → "3456" This is independent of parsing. If you want parsing to stop at the decimal point, use setParseIntegerOnly.
You can also use forms of the parse and format methods with ParsePosition and FieldPosition to allow you to:
FieldPosition in your format call, with field = INTEGER_FIELD. On output, getEndIndex will be set to the offset between the last character of the integer and the decimal. Add (desiredSpaceCount - getEndIndex) spaces at the front of the string. getEndIndex. Then move the pen by (desiredPixelWidth - widthToAlignmentPoint) before drawing the text. It also works where there is no decimal, but possibly additional characters at the end, e.g., with parentheses in negative numbers: "(12)" for -12. Number formats are generally not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
DecimalFormat,
ChoiceFormat,
Serialized Form
| Modifier and Type | Class and Description |
|---|---|
static class |
NumberFormat
Defines constants that are used as attribute keys in the
AttributedCharacterIterator returned from
NumberFormat.formatToCharacterIterator and as field identifiers in
FieldPosition.
|
| Modifier and Type | Field and Description |
|---|---|
static int |
FRACTION_FIELD
Field constant used to construct a FieldPosition object.
|
static int |
INTEGER_FIELD
Field constant used to construct a FieldPosition object.
|
| Modifier | Constructor and Description |
|---|---|
protected |
NumberFormat()
Sole constructor.
|
| Modifier and Type | Method and Description |
|---|---|
Object |
clone()
Overrides Cloneable.
|
boolean |
equals(Object
Overrides equals.
|
String |
format(double number)
Specialization of format.
|
abstract StringBuffer |
format(double number, StringBuffer
Specialization of format.
|
String |
format(long number)
Specialization of format.
|
abstract StringBuffer |
format(long number, StringBuffer
Specialization of format.
|
StringBuffer |
format(Object
Formats a number and appends the resulting text to the given string buffer.
|
static Locale |
getAvailableLocales()
Returns an array of all locales for which the
get*Instance methods of this class can return localized instances.
|
Currency |
getCurrency()
Gets the currency used by this number format when formatting currency values.
|
static NumberFormat |
getCurrencyInstance()
Returns a currency format for the current default
FORMAT locale.
|
static NumberFormat |
getCurrencyInstance(Locale
Returns a currency format for the specified locale.
|
static NumberFormat |
getInstance()
Returns a general-purpose number format for the current default
FORMAT locale.
|
static NumberFormat |
getInstance(Locale
Returns a general-purpose number format for the specified locale.
|
static NumberFormat |
getIntegerInstance()
Returns an integer number format for the current default
FORMAT locale.
|
static NumberFormat |
getIntegerInstance(Locale
Returns an integer number format for the specified locale.
|
int |
getMaximumFractionDigits()
Returns the maximum number of digits allowed in the fraction portion of a number.
|
int |
getMaximumIntegerDigits()
Returns the maximum number of digits allowed in the integer portion of a number.
|
int |
getMinimumFractionDigits()
Returns the minimum number of digits allowed in the fraction portion of a number.
|
int |
getMinimumIntegerDigits()
Returns the minimum number of digits allowed in the integer portion of a number.
|
static NumberFormat |
getNumberInstance()
Returns a general-purpose number format for the current default
FORMAT locale.
|
static NumberFormat |
getNumberInstance(Locale
Returns a general-purpose number format for the specified locale.
|
static NumberFormat |
getPercentInstance()
Returns a percentage format for the current default
FORMAT locale.
|
static NumberFormat |
getPercentInstance(Locale
Returns a percentage format for the specified locale.
|
RoundingMode |
getRoundingMode()
Gets the
RoundingMode used in this NumberFormat.
|
int |
hashCode()
Overrides hashCode.
|
boolean |
isGroupingUsed()
Returns true if grouping is used in this format.
|
boolean |
isParseIntegerOnly()
Returns true if this format will parse numbers as integers only.
|
Number |
parse(String
Parses text from the beginning of the given string to produce a number.
|
abstract Number |
parse(String
Returns a Long if possible (e.g., within the range [Long.MIN_VALUE, Long.MAX_VALUE] and with no decimals), otherwise a Double.
|
Object |
parseObject(String
Parses text from a string to produce a
Number.
|
void |
setCurrency(Currency
Sets the currency used by this number format when formatting currency values.
|
void |
setGroupingUsed(boolean newValue)
Set whether or not grouping will be used in this format.
|
void |
setMaximumFractionDigits(int newValue)
Sets the maximum number of digits allowed in the fraction portion of a number.
|
void |
setMaximumIntegerDigits(int newValue)
Sets the maximum number of digits allowed in the integer portion of a number.
|
void |
setMinimumFractionDigits(int newValue)
Sets the minimum number of digits allowed in the fraction portion of a number.
|
void |
setMinimumIntegerDigits(int newValue)
Sets the minimum number of digits allowed in the integer portion of a number.
|
void |
setParseIntegerOnly(boolean value)
Sets whether or not numbers should be parsed as integers only.
|
void |
setRoundingMode(RoundingMode
Sets the
RoundingMode used in this NumberFormat.
|
format, formatToCharacterIterator, parseObjectpublic static final int INTEGER_FIELD
FieldPosition,
Constant Field Values
public static final int FRACTION_FIELD
FieldPosition,
Constant Field Values
protected NumberFormat()
public StringBufferformat(Object number, StringBuffer toAppendTo, FieldPosition pos)
Number.
This implementation extracts the number's value using Number for all integral type values that can be converted to long without loss of information, including BigInteger values with a bit length of less than 64, and Number for all other types. It then calls format(long,java.lang.StringBuffer,java.text.FieldPosition) or format(double,java.lang.StringBuffer,java.text.FieldPosition). This may result in loss of magnitude information and precision for BigInteger and BigDecimal values.
format in class
Format
number - the number to format
toAppendTo - the
StringBuffer to which the formatted text is to be appended
pos - On input: an alignment field, if desired. On output: the offsets of the alignment field.
toAppendTo
IllegalArgumentException - if
number is null or not an instance of
Number.
NullPointerException - if
toAppendTo or
pos is null
ArithmeticException - if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
FieldPosition
public final ObjectparseObject(String source, ParsePosition pos)
Number.
The method attempts to parse text starting at the index given by pos. If parsing succeeds, then the index of pos is updated to the index after the last character used (parsing does not necessarily use all characters up to the end of the string), and the parsed number is returned. The updated pos can be used to indicate the starting point for the next call to this method. If an error occurs, then the index of pos is not changed, the error index of pos is set to the index of the character where the error occurred, and null is returned.
See the parse(String, ParsePosition) method for more information on number parsing.
parseObject in class
Format
source - A
String, part of which should be parsed.
pos - A
ParsePosition object with index and error index information as described above.
Number parsed from the string. In case of error, returns null.
NullPointerException - if
pos is null.
public final Stringformat(double number)
number - the double number to format
ArithmeticException - if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public final Stringformat(long number)
number - the long number to format
ArithmeticException - if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public abstract StringBufferformat(double number, StringBuffer toAppendTo, FieldPosition pos)
number - the double number to format
toAppendTo - the StringBuffer to which the formatted text is to be appended
pos - the field position
ArithmeticException - if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public abstract StringBufferformat(long number, StringBuffer toAppendTo, FieldPosition pos)
number - the long number to format
toAppendTo - the StringBuffer to which the formatted text is to be appended
pos - the field position
ArithmeticException - if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public abstract Numberparse(String source, ParsePosition parsePosition)
source - the String to parse
parsePosition - the parse position
isParseIntegerOnly(),
Format.parseObject(java.lang.String, java.text.ParsePosition)
public Numberparse(String source) throws ParseException
See the parse(String, ParsePosition) method for more information on number parsing.
source - A
String whose beginning should be parsed.
Number parsed from the string.
ParseException - if the beginning of the specified string cannot be parsed.
public boolean isParseIntegerOnly()
true if numbers should be parsed as integers only;
false otherwise
public void setParseIntegerOnly(boolean value)
value -
true if numbers should be parsed as integers only;
false otherwise
isParseIntegerOnly()
public static final NumberFormatgetInstance()
FORMAT locale. This is the same as calling
getNumberInstance().
NumberFormat instance for general-purpose number formatting
public static NumberFormatgetInstance(Locale inLocale)
getNumberInstance(inLocale).
inLocale - the desired locale
NumberFormat instance for general-purpose number formatting
public static final NumberFormatgetNumberInstance()
FORMAT locale.
This is equivalent to calling getNumberInstance(Locale.getDefault(Locale.Category.FORMAT)).
NumberFormat instance for general-purpose number formatting
Locale.getDefault(java.util.Locale.Category) ,
Locale.Category.FORMAT
public static NumberFormatgetNumberInstance(Locale inLocale)
inLocale - the desired locale
NumberFormat instance for general-purpose number formatting
public static final NumberFormatgetIntegerInstance()
FORMAT locale. The returned number format is configured to round floating point numbers to the nearest integer using half-even rounding (see
RoundingMode.HALF_EVEN) for formatting, and to parse only the integer part of an input string (see
isParseIntegerOnly).
This is equivalent to calling getIntegerInstance(Locale.getDefault(Locale.Category.FORMAT)).
getRoundingMode(),
Locale.getDefault(java.util.Locale.Category) ,
Locale.Category.FORMAT
public static NumberFormatgetIntegerInstance(Locale inLocale)
RoundingMode.HALF_EVEN) for formatting, and to parse only the integer part of an input string (see
isParseIntegerOnly).
inLocale - the desired locale
getRoundingMode()
public static final NumberFormatgetCurrencyInstance()
FORMAT locale.
This is equivalent to calling getCurrencyInstance(Locale.getDefault(Locale.Category.FORMAT)).
NumberFormat instance for currency formatting
Locale.getDefault(java.util.Locale.Category) ,
Locale.Category.FORMAT
public static NumberFormatgetCurrencyInstance(Locale inLocale)
inLocale - the desired locale
NumberFormat instance for currency formatting
public static final NumberFormatgetPercentInstance()
FORMAT locale.
This is equivalent to calling getPercentInstance(Locale.getDefault(Locale.Category.FORMAT)).
NumberFormat instance for percentage formatting
Locale.getDefault(java.util.Locale.Category) ,
Locale.Category.FORMAT
public static NumberFormatgetPercentInstance(Locale inLocale)
inLocale - the desired locale
NumberFormat instance for percentage formatting
public static Locale[] getAvailableLocales()
get*Instance methods of this class can return localized instances. The returned array represents the union of locales supported by the Java runtime and by installed
NumberFormatProvider implementations. It must contain at least a
Locale instance equal to
Locale.US.
NumberFormat instances are available.
public int hashCode()
hashCode in class
Object
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
public boolean equals(Objectobj)
equals in class
Object
obj - the reference object with which to compare.
true if this object is the same as the obj argument;
false otherwise.
Object.hashCode() ,
HashMap
public Objectclone()
public boolean isGroupingUsed()
true if grouping is used;
false otherwise
setGroupingUsed(boolean)
public void setGroupingUsed(boolean newValue)
newValue -
true if grouping is used;
false otherwise
isGroupingUsed()
public int getMaximumIntegerDigits()
setMaximumIntegerDigits(int)
public void setMaximumIntegerDigits(int newValue)
newValue - the maximum number of integer digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
getMaximumIntegerDigits()
public int getMinimumIntegerDigits()
setMinimumIntegerDigits(int)
public void setMinimumIntegerDigits(int newValue)
newValue - the minimum number of integer digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
getMinimumIntegerDigits()
public int getMaximumFractionDigits()
setMaximumFractionDigits(int)
public void setMaximumFractionDigits(int newValue)
newValue - the maximum number of fraction digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
getMaximumFractionDigits()
public int getMinimumFractionDigits()
setMinimumFractionDigits(int)
public void setMinimumFractionDigits(int newValue)
newValue - the minimum number of fraction digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted.
getMinimumFractionDigits()
public CurrencygetCurrency()
setCurrency.
The default implementation throws UnsupportedOperationException.
null
UnsupportedOperationException - if the number format class doesn't implement currency formatting
public void setCurrency(Currencycurrency)
The default implementation throws UnsupportedOperationException.
currency - the new currency to be used by this number format
UnsupportedOperationException - if the number format class doesn't implement currency formatting
NullPointerException - if
currency is null
public RoundingModegetRoundingMode()
RoundingMode used in this NumberFormat. The default implementation of this method in NumberFormat always throws
UnsupportedOperationException. Subclasses which handle different rounding modes should override this method.
RoundingMode used for this NumberFormat.
UnsupportedOperationException - The default implementation always throws this exception
setRoundingMode(RoundingMode)
public void setRoundingMode(RoundingModeroundingMode)
RoundingMode used in this NumberFormat. The default implementation of this method in NumberFormat always throws
UnsupportedOperationException. Subclasses which handle different rounding modes should override this method.
roundingMode - The
RoundingMode to be used
UnsupportedOperationException - The default implementation always throws this exception
NullPointerException - if
roundingMode is null
getRoundingMode()