public abstract class NumberFormat extends Format
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:
myString = NumberFormat.getInstance().format(myNumber);
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.
NumberFormat nf = NumberFormat.getInstance();
for (int i = 0; i < a.length; ++i) {
output.println(nf.format(myNumber[i]) + "; ");
}
To format a number for a different locale, specify it in the call to
getInstance.
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
You can also use a NumberFormat to parse numbers:
myNumber = nf.parse(myString);
Use #getInstance or #getNumberInstance to get the default number
format. Use getIntegerInstance() to get an integer number format,
getCurrencyInstance() to get the currency number format, and
getPercentInstance() to get a format for displaying percentages.
You can also control the display of numbers with methods such 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 is designed such that some controls work for formatting
and others work for parsing. For example, setParseIntegerOnly only
affects parsing: If set to true, "3456.78" is parsed as 3456 (and
leaves the parse position just after '6'); if set to false,
"3456.78" is parsed as 3456.78 (and leaves the parse position just after
'8'). This is independent of formatting.
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 to the front of the string.getEndIndex. Then move the pen by (desiredPixelWidth -
widthToAlignmentPoint) before drawing the text. This also works where there
is no decimal but possibly additional characters before or after the number,
for example 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 is the concrete implementation of NumberFormat,
and the NumberFormat API is essentially an abstraction of
DecimalFormat's API. Refer to DecimalFormat for more
information about this API.
DecimalFormat,
ChoiceFormat,
Serialized Form| Modifier and Type | Class and Description |
|---|---|
static class |
NumberFormat.Field
The instances of this inner class are used as attribute keys and values
in
AttributedCharacterIterator that the
Format.formatToCharacterIterator(Object) method returns. |
| Modifier and Type | Field and Description |
|---|---|
static int |
FRACTION_FIELD
Field constant identifying the fractional part of a number.
|
static int |
INTEGER_FIELD
Field constant identifying the integer part of a number.
|
| Modifier | Constructor and Description |
|---|---|
protected |
NumberFormat()
Used by subclasses.
|
| Modifier and Type | Method and Description |
|---|---|
Object |
clone()
Returns a new
NumberFormat with the same properties. |
boolean |
equals(Object object)
Compares the specified object to this number format and indicates if
they are equal.
|
String |
format(double value)
Formats the specified double using the rules of this number format.
|
abstract StringBuffer |
format(double value,
StringBuffer buffer,
FieldPosition field)
Formats the specified double value as a string using the pattern of this
number format and appends the string to the specified string buffer.
|
String |
format(long value)
Formats the specified long using the rules of this number format.
|
abstract StringBuffer |
format(long value,
StringBuffer buffer,
FieldPosition field)
Formats the specified long value as a string using the pattern of this
number format and appends the string to the specified string buffer.
|
StringBuffer |
format(Object object,
StringBuffer buffer,
FieldPosition field)
Formats a number into a supplied buffer.
|
static Locale[] |
getAvailableLocales()
Returns an array of locales for which custom
NumberFormat instances
are available. |
Currency |
getCurrency()
Returns the currency used by this number format.
|
static NumberFormat |
getCurrencyInstance()
Returns a
NumberFormat for formatting and parsing currency values
for the user's default locale. |
static NumberFormat |
getCurrencyInstance(Locale locale)
Returns a
NumberFormat for formatting and parsing currency values
for the specified locale. |
static NumberFormat |
getInstance()
Returns a
NumberFormat for formatting and parsing numbers for the
default locale. |
static NumberFormat |
getInstance(Locale locale)
Returns a
NumberFormat for formatting and parsing numbers for the
specified locale. |
static NumberFormat |
getIntegerInstance()
Returns a
NumberFormat for formatting and parsing integers for the
user's default locale. |
static NumberFormat |
getIntegerInstance(Locale locale)
Returns a
NumberFormat for formatting and parsing integers for
the specified locale. |
int |
getMaximumFractionDigits()
Returns the maximum number of fraction digits that are printed when
formatting.
|
int |
getMaximumIntegerDigits()
Returns the maximum number of integer digits that are printed when
formatting.
|
int |
getMinimumFractionDigits()
Returns the minimum number of fraction digits that are printed when
formatting.
|
int |
getMinimumIntegerDigits()
Returns the minimum number of integer digits that are printed when
formatting.
|
static NumberFormat |
getNumberInstance()
Returns a
NumberFormat for formatting and parsing numbers for the
user's default locale. |
static NumberFormat |
getNumberInstance(Locale locale)
Returns a
NumberFormat for formatting and parsing numbers for the
specified locale. |
static NumberFormat |
getPercentInstance()
Returns a
NumberFormat for formatting and parsing percentage
values for the user's default locale. |
static NumberFormat |
getPercentInstance(Locale locale)
Returns a
NumberFormat for formatting and parsing percentage
values for the given locale. |
RoundingMode |
getRoundingMode()
Returns the
RoundingMode used by this NumberFormat. |
int |
hashCode()
Returns an integer hash code for this object.
|
boolean |
isGroupingUsed()
Indicates whether this number format formats and parses numbers using a
grouping separator.
|
boolean |
isParseIntegerOnly()
Returns true if this number format only parses integer numbers.
|
Number |
parse(String string)
Parses a
Number from the specified string using the rules of this
number format. |
abstract Number |
parse(String string,
ParsePosition position)
Parses a
Number from the specified string starting at the index
specified by position. |
Object |
parseObject(String string,
ParsePosition position)
Parses the specified string starting at the index specified by
position. |
void |
setCurrency(Currency currency)
Sets the currency used by this number format when formatting currency
values.
|
void |
setGroupingUsed(boolean value)
Sets whether this number format formats and parses numbers using a
grouping separator.
|
void |
setMaximumFractionDigits(int value)
Sets the maximum number of fraction digits that are printed when
formatting.
|
void |
setMaximumIntegerDigits(int value)
Sets the new maximum count of integer digits that are printed when
formatting.
|
void |
setMinimumFractionDigits(int value)
Sets the minimum number of fraction digits that are printed when
formatting.
|
void |
setMinimumIntegerDigits(int value)
Sets the minimum number of integer digits that are printed when
formatting.
|
void |
setParseIntegerOnly(boolean value)
Specifies if this number format should parse numbers only as integers or
else as any kind of number.
|
void |
setRoundingMode(RoundingMode roundingMode)
Sets the
RoundingMode used by this NumberFormat. |
format, formatToCharacterIterator, parseObjectpublic static final int INTEGER_FIELD
public static final int FRACTION_FIELD
protected NumberFormat()
public Object clone()
NumberFormat with the same properties.public boolean equals(Object object)
object must be an instance
of NumberFormat with the same pattern and properties.equals in class Objectobject - the object to compare with this object.true if the specified object is equal to this number
format; false otherwise.hashCode()public final String format(double value)
value - the double to format.public abstract StringBuffer format(double value, StringBuffer buffer, FieldPosition field)
If the field member of position contains a value
specifying a format field, then its beginIndex and
endIndex members will be updated with the position of the first
occurrence of this field in the formatted text.
value - the double to format.buffer - the target string buffer to append the formatted double value
to.field - on input: an optional alignment field; on output: the offsets
of the alignment field in the formatted text.public final String format(long value)
value - the long to format.public abstract StringBuffer format(long value, StringBuffer buffer, FieldPosition field)
If the field member of position contains a value
specifying a format field, then its beginIndex and
endIndex members will be updated with the position of the first
occurrence of this field in the formatted text.
value - the long to format.buffer - the target string buffer to append the formatted long value
to.field - on input: an optional alignment field; on output: the offsets
of the alignment field in the formatted text.public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field)
The number must be a subclass of Number. Instances of Byte, Short,
Integer, and Long have Number.longValue invoked, as do instances of
BigInteger where BigInteger.bitLength returns less than 64. All other
values have Number.doubleValue invoked instead.
If the field member of field contains a value specifying
a format field, then its beginIndex and endIndex members
will be updated with the position of the first occurrence of this field
in the formatted text.
format in class Formatobject - the object to format, must be a Number.buffer - the target string buffer to append the formatted number to.field - on input: an optional alignment field; on output: the offsets
of the alignment field in the formatted text.IllegalArgumentException - if object is not an instance of Number.public static Locale[] getAvailableLocales()
NumberFormat instances
are available.
Note that Android does not support user-supplied locale service providers.
public Currency getCurrency()
This implementation throws UnsupportedOperationException,
concrete subclasses should override this method if they support currency
formatting.
null.UnsupportedOperationExceptionpublic static final NumberFormat getCurrencyInstance()
NumberFormat for formatting and parsing currency values
for the user's default locale.
See "Be wary of the default locale".NumberFormat for handling currency values.public static NumberFormat getCurrencyInstance(Locale locale)
NumberFormat for formatting and parsing currency values
for the specified locale.locale - the locale to use.NumberFormat for handling currency values.public static final NumberFormat getIntegerInstance()
NumberFormat for formatting and parsing integers for the
user's default locale.
See "Be wary of the default locale".NumberFormat for handling integers.public static NumberFormat getIntegerInstance(Locale locale)
NumberFormat for formatting and parsing integers for
the specified locale.locale - the locale to use.NumberFormat for handling integers.public static final NumberFormat getInstance()
NumberFormat for formatting and parsing numbers for the
default locale.NumberFormat for handling Number objects.public static NumberFormat getInstance(Locale locale)
NumberFormat for formatting and parsing numbers for the
specified locale.locale - the locale to use.NumberFormat for handling Number objects.public int getMaximumFractionDigits()
public int getMaximumIntegerDigits()
public int getMinimumFractionDigits()
public int getMinimumIntegerDigits()
public static final NumberFormat getNumberInstance()
NumberFormat for formatting and parsing numbers for the
user's default locale.
See "Be wary of the default locale".NumberFormat for handling Number objects.public static NumberFormat getNumberInstance(Locale locale)
NumberFormat for formatting and parsing numbers for the
specified locale.locale - the locale to use.NumberFormat for handling Number objects.public static final NumberFormat getPercentInstance()
NumberFormat for formatting and parsing percentage
values for the user's default locale.
See "Be wary of the default locale".
The NumberFormat returned by this method should only be used
to format floating-point numbers typically between 0 and 1 (with 1 being 100%).
A value such as 0.53 will be treated as 53%, but 53.0 (or the integer 53) will be
treated as 5,300%, which is rarely what you intended.
Non-integer percentages will be rounded according to the rounding mode,
so by default 0.142 will be 14% but 0.148 will be 15%. If you want fractional
percentages, use setMaximumFractionDigits(int).
public static NumberFormat getPercentInstance(Locale locale)
NumberFormat for formatting and parsing percentage
values for the given locale.
The NumberFormat returned by this method should only be used
to format floating-point numbers typically between 0 and 1 (with 1 being 100%).
A value such as 0.53 will be treated as 53%, but 53.0 (or the integer 53) will be
treated as 5,300%, which is rarely what you intended.
Non-integer percentages will be rounded according to the rounding mode,
so by default 0.142 will be 14% but 0.148 will be 15%. If you want fractional
percentages, use setMaximumFractionDigits(int).
public int hashCode()
ObjectObject.equals(java.lang.Object) returns true must return
the same hash code value. This means that subclasses of Object
usually override both methods or neither method.
Note that hash values must not change over time unless information used in equals comparisons also changes.
See Writing a correct
hashCode method
if you intend implementing your own hashCode method.
hashCode in class ObjectObject.equals(java.lang.Object)public boolean isGroupingUsed()
true if a grouping separator is used; false
otherwise.public boolean isParseIntegerOnly()
public Number parse(String string) throws ParseException
Number from the specified string using the rules of this
number format.string - the string to parse.Number resulting from the parsing.ParseException - if an error occurs during parsing.public abstract Number parse(String string, ParsePosition position)
Number from the specified string starting at the index
specified by position. If the string is successfully parsed then
the index of the ParsePosition is updated to the index following
the parsed text. On error, the index is unchanged and the error index of
ParsePosition is set to the index where the error occurred.string - the string to parse.position - input/output parameter, specifies the start index in
string from where to start parsing. If parsing is
successful, it is updated with the index following the parsed
text; on error, the index is unchanged and the error index is
set to the index where the error occurred.Number resulting from the parse or null if
there is an error.public final Object parseObject(String string, ParsePosition position)
Formatposition. If the string is successfully parsed then the index of
the ParsePosition is updated to the index following the parsed
text. On error, the index is unchanged and the error index of
ParsePosition is set to the index where the error occurred.parseObject in class Formatstring - the string to parse.position - input/output parameter, specifies the start index in
string from where to start parsing. If parsing is
successful, it is updated with the index following the parsed
text; on error, the index is unchanged and the error index is
set to the index where the error occurred.null if there is
an error.public void setCurrency(Currency currency)
This implementation throws UnsupportedOperationException,
concrete subclasses should override this method if they support currency
formatting.
currency - the new currency.UnsupportedOperationExceptionpublic void setGroupingUsed(boolean value)
value - true if a grouping separator is used; false
otherwise.public void setMaximumFractionDigits(int value)
value - the maximum number of fraction digits.public void setMaximumIntegerDigits(int value)
value - the new maximum number of integer numerals for display.public void setMinimumFractionDigits(int value)
value - the minimum number of fraction digits.public void setMinimumIntegerDigits(int value)
value - the minimum number of integer digits.public void setParseIntegerOnly(boolean value)
true
value then subsequent parsing attempts will stop if a decimal separator
is encountered.value - true to only parse integers, false to parse
integers as well as fractions.public RoundingMode getRoundingMode()
RoundingMode used by this NumberFormat. The default
implementation in NumberFormat throws UnsupportedOperationException.
Subclasses for which a rounding mode is meaningful are expected to override this method.public void setRoundingMode(RoundingMode roundingMode)
RoundingMode used by this NumberFormat. The default
implementation in NumberFormat throws UnsupportedOperationException.
Subclasses for which a rounding mode is meaningful are expected to override this method.