Serializable
, Cloneable
ChoiceFormat
, CompactNumberFormat
, DecimalFormat
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:
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 < myNumber.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);
If the locale contains "nu" (numbers) and/or "rg" (region override) Unicode extensions, the decimal digits, and/or the country used for formatting are overridden. If both "nu" and "rg" are specified, the decimal digits from the "nu" extension supersedes the implicit one from the "rg" extension.
You can also use a NumberFormat
to parse numbers:
myNumber = nf.parse(myString);
Use
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. Use
getCompactNumberInstance
to get the compact number format to format a number in shorter form. For example,
2000
can be formatted as
"2K"
in
US locale
. 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
or CompactNumberFormat
depending on the factory method used. 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:
For example, you can align numbers in two ways:
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.
format(double, StringBuffer, FieldPosition)
, format(long, StringBuffer, FieldPosition)
and parse(String, ParsePosition)
methods may throw NullPointerException
, if any of their parameter is null
. The subclass may provide its own implementation and specification about NullPointerException
.
The default implementation provides rounding modes defined in RoundingMode
for formatting numbers. It uses the round half-even algorithm. To change the rounding mode use setRoundingMode
. The NumberFormat
returned by the static factory methods is configured to round floating point numbers using half-even rounding (see RoundingMode.HALF_EVEN
) for formatting.
Nested Classes
static class
Defines constants that are used as attribute keys in the AttributedCharacterIterator
returned from NumberFormat.formatToCharacterIterator
and as field identifiers in FieldPosition
.
static enum
Fields
static final int
Field constant used to construct a FieldPosition object.
static final int
Field constant used to construct a FieldPosition object.
Constructors
boolean
Specialization of format.
Specialization of format.
Specialization of format.
Specialization of format.
Formats a number and appends the resulting text to the given string buffer.
Returns an array of all locales for which the get*Instance
methods of this class can return localized instances.
Returns a compact number format for the default
FORMAT
locale with
"SHORT"
format style.
Gets the currency used by this number format when formatting currency values.
Returns a currency format for the current default
FORMAT
locale.
Returns a currency format for the specified locale.
Returns a general-purpose number format for the current default
FORMAT
locale.
Returns a general-purpose number format for the specified locale.
Returns an integer number format for the current default
FORMAT
locale.
Returns an integer number format for the specified locale.
int
Returns the maximum number of digits allowed in the fraction portion of a number.
int
Returns the maximum number of digits allowed in the integer portion of a number.
int
Returns the minimum number of digits allowed in the fraction portion of a number.
int
Returns the minimum number of digits allowed in the integer portion of a number.
Returns a general-purpose number format for the current default
FORMAT
locale.
Returns a general-purpose number format for the specified locale.
Returns a percentage format for the current default
FORMAT
locale.
Returns a percentage format for the specified locale.
int
boolean
Returns true if grouping is used in this format.
boolean
Returns true if this format will parse numbers as integers only.
Parses text from the beginning of the given string to produce a number.
Returns a Long if possible (e.g., within the range [Long.MIN_VALUE, Long.MAX_VALUE] and with no decimals), otherwise a Double.
Parses text from a string to produce a Number
.
void
Sets the currency used by this number format when formatting currency values.
void
Set whether or not grouping will be used in this format.
void
Sets the maximum number of digits allowed in the fraction portion of a number. maximumFractionDigits must be ≥ minimumFractionDigits.
void
Sets the maximum number of digits allowed in the integer portion of a number. maximumIntegerDigits must be ≥ minimumIntegerDigits.
void
Sets the minimum number of digits allowed in the fraction portion of a number. minimumFractionDigits must be ≤ maximumFractionDigits.
void
Sets the minimum number of digits allowed in the integer portion of a number. minimumIntegerDigits must be ≤ maximumIntegerDigits.
void
Sets whether or not numbers should be parsed as integers only.
void
public static final int INTEGER_FIELD
Field constant used to construct a FieldPosition object. Signifies that the position of the integer part of a formatted number should be returned.
public static final int FRACTION_FIELD
Field constant used to construct a FieldPosition object. Signifies that the position of the fraction part of a formatted number should be returned.
protected NumberFormat()
Sole constructor. (For invocation by subclass constructors, typically implicit.)
format
in class Format
number
- the number to format
toAppendTo
- the StringBuffer
to which the formatted text is to be appended
pos
- keeps track on the position of the field within the returned string. For example, for formatting a number 1234567.89
in Locale.US
locale, if the given fieldPosition
is INTEGER_FIELD
, the begin index and end index of fieldPosition
will be set to 0 and 9, respectively for the output string 1,234,567.89
.
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
Parses text from a string to produce a
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 source
or pos
is null.
Specialization of format.
number
- the double number to format
ArithmeticException
- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Specialization of format.
number
- the long number to format
ArithmeticException
- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Specialization of format.
number
- the double number to format
toAppendTo
- the StringBuffer to which the formatted text is to be appended
pos
- keeps track on the position of the field within the returned string. For example, for formatting a number 1234567.89
in Locale.US
locale, if the given fieldPosition
is INTEGER_FIELD
, the begin index and end index of fieldPosition
will be set to 0 and 9, respectively for the output string 1,234,567.89
.
ArithmeticException
- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Specialization of format.
number
- the long number to format
toAppendTo
- the StringBuffer to which the formatted text is to be appended
pos
- keeps track on the position of the field within the returned string. For example, for formatting a number 123456789
in Locale.US
locale, if the given fieldPosition
is INTEGER_FIELD
, the begin index and end index of fieldPosition
will be set to 0 and 11, respectively for the output string 123,456,789
.
ArithmeticException
- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY
Returns a Long if possible (e.g., within the range [Long.MIN_VALUE, Long.MAX_VALUE] and with no decimals), otherwise a Double. If IntegerOnly is set, will stop at a decimal point (or equivalent; e.g., for rational numbers "1 2/3", will stop after the 1). Does not throw an exception; if no object can be parsed, index is unchanged!
source
- the String to parse
parsePosition
- the parse position
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()
Returns true if this format will parse numbers as integers only. For example in the English locale, with ParseIntegerOnly true, the string "1234." would be parsed as the integer value 1234 and parsing would stop at the "." character. Of course, the exact format accepted by the parse operation is locale dependent and determined by sub-classes of NumberFormat.
true
if numbers should be parsed as integers only; false
otherwise
public void setParseIntegerOnly(boolean value)
Sets whether or not numbers should be parsed as integers only.
value
- true
if numbers should be parsed as integers only; false
otherwise
Returns a general-purpose number format for the current default
FORMAT
locale. This is the same as calling
getNumberInstance()
.
NumberFormat
instance for general-purpose number formatting
inLocale
- the desired locale
NumberFormat
instance for general-purpose number formatting
NumberFormat
instance for general-purpose number formatting
Returns a general-purpose number format for the specified locale.
inLocale
- the desired locale
NumberFormat
instance for general-purpose number formatting
Returns an integer number format for the specified 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
).
inLocale
- the desired locale
NumberFormat
instance for currency formatting
If the specified locale contains the "cf
" ( currency format style) Unicode extension, the returned currency format uses the style if it is available. Otherwise, the style uses the default "standard
" currency format. For example, if the style designates "account
", negative currency amounts use a pair of parentheses in some locales.
inLocale
- the desired locale
NumberFormat
instance for currency formatting
NumberFormat
instance for percentage formatting
Returns a percentage format for the specified locale.
inLocale
- the desired locale
NumberFormat
instance for percentage formatting
Returns a compact number format for the default
FORMAT
locale with
"SHORT"
format style.
NumberFormat
instance for compact number formatting
locale
- the desired locale
formatStyle
- the style for formatting a number
NumberFormat
instance for compact number formatting
NullPointerException
- if locale
or formatStyle
is null
()
Returns an array of all locales for which the
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()
Overrides hashCode.
Overrides equals.
Overrides Cloneable.
public boolean isGroupingUsed()
Returns true if grouping is used in this format. For example, in the English locale, with grouping on, the number 1234567 might be formatted as "1,234,567". The grouping separator as well as the size of each group is locale dependent and is determined by sub-classes of NumberFormat.
true
if grouping is used; false
otherwise
public void setGroupingUsed(boolean newValue)
Set whether or not grouping will be used in this format.
newValue
- true
if grouping is used; false
otherwise
public int getMaximumIntegerDigits()
Returns the maximum number of digits allowed in the integer portion of a number.
public void setMaximumIntegerDigits(int newValue)
Sets the maximum number of digits allowed in the integer portion of a number. maximumIntegerDigits must be ≥ minimumIntegerDigits. If the new value for maximumIntegerDigits is less than the current value of minimumIntegerDigits, then minimumIntegerDigits will also be set to the new value.
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.
public int getMinimumIntegerDigits()
Returns the minimum number of digits allowed in the integer portion of a number.
public void setMinimumIntegerDigits(int newValue)
Sets the minimum number of digits allowed in the integer portion of a number. minimumIntegerDigits must be ≤ maximumIntegerDigits. If the new value for minimumIntegerDigits exceeds the current value of maximumIntegerDigits, then maximumIntegerDigits will also be set to the new value
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.
public int getMaximumFractionDigits()
Returns the maximum number of digits allowed in the fraction portion of a number.
public void setMaximumFractionDigits(int newValue)
Sets the maximum number of digits allowed in the fraction portion of a number. maximumFractionDigits must be ≥ minimumFractionDigits. If the new value for maximumFractionDigits is less than the current value of minimumFractionDigits, then minimumFractionDigits will also be set to the new value.
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.
public int getMinimumFractionDigits()
Returns the minimum number of digits allowed in the fraction portion of a number.
public void setMinimumFractionDigits(int newValue)
Sets the minimum number of digits allowed in the fraction portion of a number. minimumFractionDigits must be ≤ maximumFractionDigits. If the new value for minimumFractionDigits exceeds the current value of maximumFractionDigits, then maximumFractionDigits will also be set to the new value
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.
Gets the currency used by this number format when formatting currency values. The initial value is derived in a locale dependent way. The returned value may be null if no valid currency could be determined and no currency has been set using
setCurrency
.
The default implementation throws UnsupportedOperationException
.
null
UnsupportedOperationException
- if the number format class doesn't implement currency formatting
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
Gets the
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
Sets the
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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4