Class DecimalFormat
- All Implemented Interfaces:
Serializable, Cloneable
DecimalFormat is a concrete subclass of
NumberFormat that formats decimal numbers in a localized manner.
It has a variety of features designed to make it possible to parse and format
numbers in any locale, including support for Western, Arabic, and Indic digits.
It also supports different kinds of numbers, including integers (123), fixed-point
numbers (123.4), scientific notation (1.23E4), percentages (12%), and
currency amounts ($123).
Getting a DecimalFormat
To obtain a standard decimal format for a specific locale, including the default locale, it is recommended to call one of theNumberFormat
factory methods, such as NumberFormat.getInstance().
These factory methods may not always return a DecimalFormat
depending on the locale-service provider implementation
installed. Thus, to use an instance method defined by DecimalFormat,
the NumberFormat returned by the factory method should be
type checked before converted to DecimalFormat. If the installed locale-sensitive
service implementation does not support the given Locale, the parent
locale chain will be looked up, and a Locale used that is supported.
If the factory methods are not desired, use one of the constructors such
as DecimalFormat(String pattern). See the Pattern section for more information on the pattern parameter.
Using DecimalFormat
The following is an example of formatting and parsing,NumberFormat nFmt = NumberFormat.getCurrencyInstance(Locale.US);
if (nFmt instanceof DecimalFormat dFmt) {
// pattern match to DecimalFormat to use setPositiveSuffix(String)
dFmt.setPositiveSuffix(" dollars");
dFmt.format(100000); // returns "$100,000.00 dollars"
dFmt.parse("$100,000.00 dollars"); // returns 100000
}
Formatting and Parsing
Rounding
When formatting,DecimalFormat can adjust its rounding using setRoundingMode(RoundingMode). By default, it uses
RoundingMode.HALF_EVEN.
Digits
When formatting,DecimalFormat uses the ten consecutive
characters starting with the localized zero digit defined in the
DecimalFormatSymbols object as digits.
When parsing, these digits as well as all Unicode decimal digits, as
defined by Character.digit, are recognized.
Integer and Fraction Digit Limits
The integer and fraction digit limits are set by either applying apattern or using one of the appropriate DecimalFormat setter methods,
for example, setMinimumFractionDigits(int). These limits have no impact
on parsing behavior.
Special Values
Not a Number (
NaN) is formatted as a string, which is typically given as "NaN". This string is determined byDecimalFormatSymbols.getNaN(). This is the only value for which the prefixes and suffixes are not attached.Infinity is formatted as a string, which is typically given as "∞" (
U+221E), with the positive or negative prefixes and suffixes attached. This string is determined byDecimalFormatSymbols.getInfinity().Negative zero (
"-0") parses toBigDecimal(0)ifisParseBigDecimal()is trueLong(0)ifisParseBigDecimal()is false andisParseIntegerOnly()is trueDouble(-0.0)if bothisParseBigDecimal()andisParseIntegerOnly()are false
Synchronization
Decimal 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 Pattern
ADecimalFormat comprises a pattern and a set of
symbols. The pattern may be set directly using applyPattern(),
or indirectly using the various API methods. The symbols are stored in a
DecimalFormatSymbols object. When using the NumberFormat factory
methods, the pattern and symbols are created from the locale-sensitive service
implementation installed.
DecimalFormat patterns have the following syntax:
Pattern:
PositivePattern
PositivePattern ; NegativePattern
PositivePattern:
Prefixopt Number Suffixopt
NegativePattern:
Prefixopt Number Suffixopt
Prefix:
Any characters except the special pattern characters
Suffix:
Any characters except the special pattern characters
Number:
Integer Exponentopt
Integer . Fraction Exponentopt
Integer:
MinimumInteger
#
# Integer
# , Integer
MinimumInteger:
0
0 MinimumInteger
0 , MinimumInteger
Fraction:
MinimumFractionopt OptionalFractionopt
MinimumFraction:
0 MinimumFractionopt
OptionalFraction:
# OptionalFractionopt
Exponent:
E MinimumExponent
MinimumExponent:
0 MinimumExponentopt
Special Pattern Characters
The special characters in the table below are interpreted syntactically when used in the DecimalFormat pattern. They must be quoted, unless noted otherwise, if they are to appear in the prefix or suffix as literals.
The characters in the Symbol column are used in non-localized
patterns. The corresponding characters in the Localized Symbol column are used
in localized patterns, with the characters in Symbol losing their
syntactical meaning. Two exceptions are the currency sign (U+00A4) and
quote (U+0027), which are not localized.
Non-localized patterns should be used when calling applyPattern(String).
Localized patterns should be used when calling applyLocalizedPattern(String).
Symbol Localized Symbol Location Meaning 0DecimalFormatSymbols.getZeroDigit()Number Digit #DecimalFormatSymbols.getDigit()Number Digit, zero shows as absent .DecimalFormatSymbols.getDecimalSeparator()Number Decimal separator or monetary decimal separator - (U+002D)DecimalFormatSymbols.getMinusSign()Number Minus sign ,DecimalFormatSymbols.getGroupingSeparator()Number Grouping separator or monetary grouping separator EDecimalFormatSymbols.getExponentSeparator()Number Separates mantissa and exponent in scientific notation. This value is case sensistive. Need not be quoted in prefix or suffix. ;DecimalFormatSymbols.getPatternSeparator()Subpattern boundary Separates positive and negative subpatterns %DecimalFormatSymbols.getPercent()Prefix or suffix Multiply by 100 and show as percentage ‰ ( U+2030)DecimalFormatSymbols.getPerMill()Prefix or suffix Multiply by 1000 and show as per mille value ¤ ( U+00A4)n/a (not localized) Prefix or suffix Currency sign, replaced by currency symbol. If doubled, replaced by international currency symbol. If present in a pattern, the monetary decimal/grouping separators are used instead of the decimal/grouping separators. ' (U+0027)n/a (not localized) Prefix or suffix Used to quote special characters in a prefix or suffix, for example, "'#'#"formats 123 to"#123". To create a single quote itself, use two in a row:"# o''clock".
Maximum Digits Derivation
For any givenDecimalFormat pattern, if the pattern is not
in scientific notation, the maximum number of integer digits will not be
derived from the pattern, and instead set to Integer.MAX_VALUE.
Otherwise, if the pattern is in scientific notation, the maximum number of
integer digits will be derived from the pattern. This derivation is detailed
in the Scientific Notation section. setMaximumIntegerDigits(int) can be used to manually adjust the maximum
integer digits.
Negative Subpatterns
ADecimalFormat pattern contains a positive and negative
subpattern, for example, "#,##0.00;(#,##0.00)". Each
subpattern has a prefix, numeric part, and suffix. The negative subpattern
is optional; if absent, then the positive subpattern prefixed with the
minus sign '-' (U+002D HYPHEN-MINUS) is used as the
negative subpattern. That is, "0.00" alone is equivalent to
"0.00;-0.00". If there is an explicit negative subpattern, it
serves only to specify the negative prefix and suffix; the number of digits,
minimal digits, and other characteristics are all the same as the positive
pattern. That means that "#,##0.0#;(#)" produces precisely
the same behavior as "#,##0.0#;(#,##0.0#)". In
lenient parsing mode, loose matching of the
minus sign pattern is enabled, following the LDML’s
loose matching specification.
The prefixes, suffixes, and various symbols used for infinity, digits,
grouping separators, decimal separators, etc. may be set to arbitrary
values, and they will appear properly during formatting. However, care must
be taken that the symbols and strings do not conflict, or parsing will be
unreliable. For example, either the positive and negative prefixes or the
suffixes must be distinct for DecimalFormat.parse() to be able
to distinguish positive from negative values. (If they are identical, then
DecimalFormat will behave as if no negative subpattern was
specified.) Another example is that the decimal separator and grouping
separator should be distinct characters, or parsing will be impossible.
Grouping Separator
The grouping separator is commonly used for thousands, but in some
locales it separates ten-thousands. The grouping size is a constant number
of digits between the grouping characters, such as 3 for 100,000,000 or 4 for
1,0000,0000. If you supply a pattern with multiple grouping characters, the
interval between the last one and the end of the integer is the one that is
used. For example, "#,##,###,####" == "######,####" ==
"##,####,####".
Scientific Notation
Numbers in scientific notation are expressed as the product of a mantissa
and a power of ten, for example, 1234 can be expressed as 1.234 x 10^3. The
mantissa is often in the range 1.0 ≤ x < 10.0, but it need not
be.
DecimalFormat can be instructed to format and parse scientific
notation only via a pattern; there is currently no factory method
that creates a scientific notation format. In a pattern, the exponent
character immediately followed by one or more digit characters indicates
scientific notation. Example: "0.###E0" formats the number
1234 as "1.234E3".
- The number of digit characters after the exponent character gives the
minimum exponent digit count. There is no maximum. Negative exponents are
formatted using the localized minus sign, not the prefix and suffix
from the pattern. This allows patterns such as
"0.###E0 m/s". - The maximum integer digits is the sum of '0's and '#'s
prior to the decimal point. The minimum integer digits is the
sum of the '0's prior to the decimal point. The maximum fraction
and minimum fraction digits follow the same rules, but apply to the
digits after the decimal point but before the exponent. For example, the
following pattern:
"#00.0####E0"would have a minimum number of integer digits = 2("00") and a maximum number of integer digits = 3("#00"). It would have a minimum number of fraction digits = 1("0") and a maximum number of fraction digits= 5("0####"). - The minimum and maximum number of integer digits are interpreted
together:
- If the maximum number of integer digits is greater than their minimum number
and greater than 1, it forces the exponent to be a multiple of the maximum
number of integer digits, and the minimum number of integer digits to be
interpreted as 1. The most common use of this is to generate
engineering notation, in which the exponent is a multiple of three,
e.g.,
"##0.#####E0". Using this pattern, the number 12345 formats to"12.345E3", and 123456 formats to"123.456E3". - Otherwise, the minimum number of integer digits is achieved by adjusting the
exponent. Example: 0.00123 formatted with
"00.###E0"yields"12.3E-4".
- If the maximum number of integer digits is greater than their minimum number
and greater than 1, it forces the exponent to be a multiple of the maximum
number of integer digits, and the minimum number of integer digits to be
interpreted as 1. The most common use of this is to generate
engineering notation, in which the exponent is a multiple of three,
e.g.,
- For a given number, the amount of significant digits in
the mantissa can be calculated as such
This means that generally, a mantissa will have up to the combined maximum integer and fraction digits, if the original number itself has enough significant digits. However, if there are more minimum pattern digits than significant digits in the original number, the mantissa will have significant digits that equals the combined minimum integer and fraction digits. The number of significant digits does not affect parsing.Mantissa Digits: min(max(Minimum Pattern Digits, Original Number Digits), Maximum Pattern Digits) Minimum pattern Digits: Minimum Integer Digits + Minimum Fraction Digits Maximum pattern Digits: Maximum Integer Digits + Maximum Fraction Digits Original Number Digits: The amount of significant digits in the number to be formattedIt should be noted, that the integer portion of the mantissa will give any excess digits to the fraction portion, whether it be for precision or for satisfying the total amount of combined minimum digits.
This behavior can be observed in the following example,
DecimalFormat df = new DecimalFormat("#000.000##E0"); df.format(12); // returns "12.0000E0" df.format(123456789) // returns "1.23456789E8" - Exponential patterns may not contain grouping separators.
- Implementation Requirements:
- When formatting a
Numberother thanBigIntegerandBigDecimal,309is used as the upper limit for integer digits, and340as the upper limit for fraction digits. This occurs, even if one of theDecimalFormatgetter methods, for example,getMinimumFractionDigits()returns a numerically greater value. - Since:
- 1.1
- External Specifications
- See Also:
-
Nested Class Summary
Nested classes/interfaces declared in class NumberFormat
NumberFormat.Field, NumberFormat.StyleModifier and TypeClassDescriptionstatic classDefines constants that are used as attribute keys in theAttributedCharacterIteratorreturned fromNumberFormat.formatToCharacterIteratorand as field identifiers inFieldPosition.static enumA number format style. -
Field Summary
Fields declared in class NumberFormat
FRACTION_FIELD, INTEGER_FIELDModifier and TypeFieldDescriptionstatic final intField constant used to construct a FieldPosition object.static final intField constant used to construct a FieldPosition object. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a DecimalFormat using the default pattern and symbols for the defaultFORMATlocale.DecimalFormat(String pattern) Creates a DecimalFormat using the given pattern and the symbols for the defaultFORMATlocale.DecimalFormat(String pattern, DecimalFormatSymbols symbols) Creates a DecimalFormat using the given pattern and symbols. -
Method Summary
Modifier and TypeMethodDescriptionvoidapplyLocalizedPattern(String pattern) Apply the given pattern to this Format object.voidapplyPattern(String pattern) Apply the given pattern to this Format object.clone()Standard override; no change in semantics.booleanCompares the specified object with thisDecimalFormatfor equality.format(double number, StringBuffer result, FieldPosition fieldPosition) Formats a double to produce a string.format(long number, StringBuffer result, FieldPosition fieldPosition) Format a long to produce a string.final StringBufferformat(Object number, StringBuffer toAppendTo, FieldPosition pos) Formats a number and appends the resulting text to the given string buffer.Formats an Object producing anAttributedCharacterIterator.Gets the currency used by this decimal format when formatting currency values.Returns a copy of the decimal format symbols, which is generally not changed by the programmer or user.intReturn the grouping size.intReturns the maximum number of digits allowed in the fraction portion of a number during formatting.intReturns the maximum number of digits allowed in the integer portion of a number during formatting.intReturns the minimum number of digits allowed in the fraction portion of a number during formatting.intReturns the minimum number of digits allowed in the integer portion of a number during formatting.intGets the multiplier for use in percent, per mille, and similar formats.Get the negative prefix.Get the negative suffix.Get the positive prefix.Get the positive suffix.Gets theRoundingModeused in this DecimalFormat.inthashCode()Returns the hash code for thisDecimalFormat.booleanAllows you to get the behavior of the decimal separator with integers.booleanReturns whether theparse(java.lang.String, java.text.ParsePosition)method returnsBigDecimal.booleanisStrict()Returnstrueif this format will parse numbers strictly;falseotherwise.parse(String text, ParsePosition pos) Parses text from the beginning of the given string to produce aNumber.voidsetCurrency(Currency currency) Sets the currency used by this number format when formatting currency values.voidsetDecimalFormatSymbols(DecimalFormatSymbols newSymbols) Sets the decimal format symbols, which is generally not changed by the programmer or user.voidsetDecimalSeparatorAlwaysShown(boolean newValue) Allows you to set the behavior of the decimal separator with integers.voidsetGroupingSize(int newValue) Set the grouping size.voidsetMaximumFractionDigits(int newValue) Sets the maximum number of digits allowed in the fraction portion of a number during formatting.voidsetMaximumIntegerDigits(int newValue) Sets the maximum number of digits allowed in the integer portion of a number during formatting.voidsetMinimumFractionDigits(int newValue) Sets the minimum number of digits allowed in the fraction portion of a number during formatting.voidsetMinimumIntegerDigits(int newValue) Sets the minimum number of digits allowed in the integer portion of a number during formatting.voidsetMultiplier(int newValue) Sets the multiplier for use in percent, per mille, and similar formats.voidsetNegativePrefix(String newValue) Set the negative prefix.voidsetNegativeSuffix(String newValue) Set the negative suffix.voidsetParseBigDecimal(boolean newValue) Sets whether theparse(java.lang.String, java.text.ParsePosition)method returnsBigDecimal.voidsetPositivePrefix(String newValue) Set the positive prefix.voidsetPositiveSuffix(String newValue) Set the positive suffix.voidsetRoundingMode(RoundingMode roundingMode) Sets theRoundingModeused in this DecimalFormat.voidsetStrict(boolean strict) Change the leniency value for parsing.Synthesizes a localized pattern string that represents the current state of this Format object.Synthesizes a pattern string that represents the current state of this Format object.toString()Returns a string identifying thisDecimalFormat, for debugging.Methods declared in class NumberFormat
format, format, getAvailableLocales, getCompactNumberInstance, getCompactNumberInstance, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setGroupingUsed, setParseIntegerOnlyModifier and TypeMethodDescriptionfinal Stringformat(double number) Specialization of format.final Stringformat(long number) Specialization of format.static Locale[]Returns an array of all locales for which theget*Instancemethods of this class can return localized instances.static NumberFormatstatic NumberFormatgetCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle) Returns a compact number format for the specifiedlocaleandformatStyle.static final NumberFormatReturns a currency format for the current defaultFORMATlocale.static NumberFormatgetCurrencyInstance(Locale inLocale) Returns a currency format for the specified locale.static final NumberFormatReturns a general-purpose number format for the current defaultFORMATlocale.static NumberFormatgetInstance(Locale inLocale) Returns a general-purpose number format for the specified locale.static final NumberFormatReturns an integer number format for the current defaultFORMATlocale.static NumberFormatgetIntegerInstance(Locale inLocale) Returns an integer number format for the specified locale.static final NumberFormatReturns a general-purpose number format for the current defaultFORMATlocale.static NumberFormatgetNumberInstance(Locale inLocale) Returns a general-purpose number format for the specified locale.static final NumberFormatReturns a percentage format for the current defaultFORMATlocale.static NumberFormatgetPercentInstance(Locale inLocale) Returns a percentage format for the specified locale.booleanReturns true if grouping is used in this format.booleanReturnstrueif this format will parse numbers as integers only.Parses text from the beginning of the given string to produce aNumber.final ObjectparseObject(String source, ParsePosition pos) Parses text from the given string to produce an object.voidsetGroupingUsed(boolean newValue) Set whether or not grouping will be used in this format.voidsetParseIntegerOnly(boolean value) Sets whether or not numbers should be parsed as integers only.Methods declared in class Format
format, parseObjectMethods declared in class Object
finalize, getClass, notify, notifyAll, wait, wait, waitModifier and TypeMethodDescriptionprotected voidfinalize()Deprecated, for removal: This API element is subject to removal in a future version.Finalization is deprecated and subject to removal in a future release.final Class<?> getClass()Returns the runtime class of thisObject.final voidnotify()Wakes up a single thread that is waiting on this object's monitor.final voidWakes up all threads that are waiting on this object's monitor.final voidwait()Causes the current thread to wait until it is awakened, typically by being notified or interrupted.final voidwait(long timeoutMillis) Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.final voidwait(long timeoutMillis, int nanos) Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
-
Constructor Details
-
DecimalFormat
public DecimalFormat()Creates a DecimalFormat using the default pattern and symbols for the defaultFORMATlocale. This is a convenient way to obtain a DecimalFormat when internationalization is not the main concern.- API Note:
- To obtain standard formats for a given locale, use the
NumberFormatfactory methods such asNumberFormat.getNumberInstance(Locale). These factories will return the most appropriate subclass of NumberFormat for a given locale. - See Also:
-
DecimalFormat
Creates a DecimalFormat using the given pattern and the symbols for the defaultFORMATlocale. This is a convenient way to obtain a DecimalFormat when internationalization is not the main concern. The number of maximum integer digits is usually not derived from the pattern. See the note in thePatternssection for more detail.- API Note:
- To obtain standard formats for a given locale, use the
NumberFormatfactory methods such asNumberFormat.getNumberInstance(Locale). These factories will return the most appropriate subclass of NumberFormat for a given locale. - Parameters:
pattern- a non-localized pattern string.- Throws:
NullPointerException- ifpatternis nullIllegalArgumentException- if the given pattern is invalid.- See Also:
-
DecimalFormat
Creates a DecimalFormat using the given pattern and symbols. Use this constructor when you need to completely customize the behavior of the format. The number of maximum integer digits is usually not derived from the pattern. See the note in thePatternssection for more detail.- API Note:
- To obtain standard formats for a given locale, use the
NumberFormatfactory methods such asNumberFormat.getInstance(Locale)orNumberFormat.getCurrencyInstance(Locale). If you need only minor adjustments to a standard format, you can modify the format returned by a NumberFormat factory method. - Parameters:
pattern- a non-localized pattern stringsymbols- the set of symbols to be used- Throws:
NullPointerException- if any of the given arguments is nullIllegalArgumentException- if the given pattern is invalid- See Also:
-
-
Method Details
-
format
Formats a number and appends the resulting text to the given string buffer. The number can be of any subclass ofNumber.- Overrides:
formatin classNumberFormat- Implementation Requirements:
- This implementation uses the maximum precision permitted.
- Parameters:
number- the number to formattoAppendTo- theStringBufferto which the formatted text is to be appendedpos- keeps track on the position of the field within the returned string. For example, for formatting a number1234567.89inLocale.USlocale, if the givenfieldPositionisNumberFormat.INTEGER_FIELD, the begin index and end index offieldPositionwill be set to 0 and 9, respectively for the output string1,234,567.89.- Returns:
- the value passed in as
toAppendTo - Throws:
IllegalArgumentException- ifnumberis null or not an instance ofNumber.NullPointerException- iftoAppendToorposis nullArithmeticException- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY- See Also:
-
format
Formats a double to produce a string.- Specified by:
formatin classNumberFormat- Parameters:
number- The double to formatresult- where the text is to be appendedfieldPosition- keeps track on the position of the field within the returned string. For example, for formatting a number1234567.89inLocale.USlocale, if the givenfieldPositionisNumberFormat.INTEGER_FIELD, the begin index and end index offieldPositionwill be set to 0 and 9, respectively for the output string1,234,567.89.- Returns:
- The formatted number string
- Throws:
NullPointerException- ifresultorfieldPositionisnullArithmeticException- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY- See Also:
-
format
Format a long to produce a string.- Specified by:
formatin classNumberFormat- Parameters:
number- The long to formatresult- where the text is to be appendedfieldPosition- keeps track on the position of the field within the returned string. For example, for formatting a number123456789inLocale.USlocale, if the givenfieldPositionisNumberFormat.INTEGER_FIELD, the begin index and end index offieldPositionwill be set to 0 and 11, respectively for the output string123,456,789.- Returns:
- The formatted number string
- Throws:
NullPointerException- ifresultorfieldPositionisnullArithmeticException- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY- See Also:
-
formatToCharacterIterator
Formats an Object producing anAttributedCharacterIterator. You can use the returnedAttributedCharacterIteratorto build the resulting String, as well as to determine information about the resulting String.Each attribute key of the AttributedCharacterIterator will be of type
NumberFormat.Field, with the attribute value being the same as the attribute key.- Overrides:
formatToCharacterIteratorin classFormat- Parameters:
obj- The object to format- Returns:
- AttributedCharacterIterator describing the formatted value.
- Throws:
NullPointerException- if obj is null.IllegalArgumentException- when the Format cannot format the given object.ArithmeticException- if rounding is needed with rounding mode being set to RoundingMode.UNNECESSARY- Since:
- 1.4
-
parse
Parses text from the beginning of the given string to produce aNumber.This method attempts to parse text starting at the index given by the
ParsePosition. If parsing succeeds, then the index of theParsePositionis 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 updatedParsePositioncan be used to indicate the starting point for the next call to this method. If an error occurs, then the index of theParsePositionis not changed, the error index of theParsePositionis set to the index of the character where the error occurred, andnullis returned.This method will return a Long if possible (e.g., within the range [Long.MIN_VALUE, Long.MAX_VALUE] and with no decimals), otherwise a Double.
Parsing can be done in either a strict or lenient manner, by default it is lenient.
Parsing fails when lenient, if the prefix and/or suffix are non-empty and cannot be found due to parsing ending early, or the first character after the prefix cannot be parsed.
Parsing fails when strict, if in
text,- The prefix is not found. For example, a
Locale.UScurrency format prefix: "$" - The suffix is not found. For example, a
Locale.USpercent format suffix: "%" -
NumberFormat.isGroupingUsed()returnstrue, andgetGroupingSize()is not adhered to -
NumberFormat.isGroupingUsed()returnsfalse, and the grouping symbol is found -
NumberFormat.isGroupingUsed()returnstrueand the grouping symbol occurs after the decimal separator - Any other characters are found, that are not the expected symbols, and are not digits that occur within the numerical portion
When lenient, the minus sign in the
negative subpatternsis loosely matched against lenient minus sign characters.The subclass returned depends on the value of
isParseBigDecimal()as well as on the string being parsed.- If
isParseBigDecimal()is false (the default), most integer values are returned asLongobjects, no matter how they are written:"17"and"17.000"both parse toLong(17). Values that cannot fit into aLongare returned asDoubles. This includes values with a fractional part, infinite values,NaN, and the value -0.0.DecimalFormatdoes not decide whether to return aDoubleor aLongbased on the presence of a decimal separator in the source string. Doing so would prevent integers that overflow the mantissa of a double, such as"-9,223,372,036,854,775,808.00", from being parsed accurately.Callers may use the
NumbermethodsdoubleValue,longValue, etc., to obtain the type they want. - If
isParseBigDecimal()is true, values are returned asBigDecimalobjects. The values are the ones constructed byBigDecimal(String)for corresponding strings in locale-independent format. The special cases negative and positive infinity and NaN are returned asDoubleinstances holding the values of the correspondingDoubleconstants.
DecimalFormatparses all Unicode characters that represent decimal digits, as defined byCharacter.digit(). In addition,DecimalFormatalso recognizes as digits the ten consecutive characters starting with the localized zero digit defined in theDecimalFormatSymbolsobject.- Specified by:
parsein classNumberFormat- Parameters:
text- the string to be parsedpos- AParsePositionobject with index and error index information as described above.- Returns:
- the parsed value, or
nullif the parse fails - Throws:
NullPointerException- iftextorposis null.- See Also:
- The prefix is not found. For example, a
-
getDecimalFormatSymbols
Returns a copy of the decimal format symbols, which is generally not changed by the programmer or user.- Returns:
- a copy of the desired DecimalFormatSymbols
- See Also:
-
setDecimalFormatSymbols
Sets the decimal format symbols, which is generally not changed by the programmer or user.- Parameters:
newSymbols- desired DecimalFormatSymbols- See Also:
-
getPositivePrefix
Get the positive prefix.Examples: +123, $123, sFr123
- Returns:
- the positive prefix
-
setPositivePrefix
Set the positive prefix.Examples: +123, $123, sFr123
- Parameters:
newValue- the new positive prefix. Non-null.- Throws:
NullPointerException- ifnewValueisnull
-
getNegativePrefix
Get the negative prefix.Examples: -123, ($123) (with negative suffix), sFr-123
- Returns:
- the negative prefix
-
setNegativePrefix
Set the negative prefix.Examples: -123, ($123) (with negative suffix), sFr-123
- Parameters:
newValue- the new negative prefix. Non-null.- Throws:
NullPointerException- ifnewValueisnull
-
getPositiveSuffix
Get the positive suffix.Example: 123%
- Returns:
- the positive suffix
-
setPositiveSuffix
Set the positive suffix.Example: 123%
- Parameters:
newValue- the new positive suffix. Non-null.- Throws:
NullPointerException- ifnewValueisnull
-
getNegativeSuffix
Get the negative suffix.Examples: -123%, ($123) (with positive suffixes)
- Returns:
- the negative suffix
-
setNegativeSuffix
Set the negative suffix.Examples: 123%
- Parameters:
newValue- the new negative suffix. Non-null.- Throws:
NullPointerException- ifnewValueisnull
-
getMultiplier
public int getMultiplier()Gets the multiplier for use in percent, per mille, and similar formats.- Returns:
- the multiplier
- See Also:
-
setMultiplier
public void setMultiplier(int newValue) Sets the multiplier for use in percent, per mille, and similar formats. For a percent format, set the multiplier to 100 and the suffixes to have '%' (for Arabic, use the Arabic percent sign). For a per mille format, set the multiplier to 1000 and the suffixes to have 'U+2030'.Example: with multiplier 100, 1.23 is formatted as "123", and "123" is parsed into 1.23. If
isParseIntegerOnly()returnstrue, "123" is parsed into 1.- Parameters:
newValue- the new multiplier- See Also:
-
getGroupingSize
public int getGroupingSize()Return the grouping size. Grouping size is the number of digits between grouping separators in the integer portion of a number. For example, in the number "123,456.78", the grouping size is 3. Grouping size of zero designates that grouping is not used, which provides the same formatting as if callingsetGroupingUsed(false).- Returns:
- the grouping size
- See Also:
-
setGroupingSize
public void setGroupingSize(int newValue) Set the grouping size. Grouping size is the number of digits between grouping separators in the integer portion of a number. For example, in the number "123,456.78", the grouping size is 3. Grouping size of zero designates that grouping is not used, which provides the same formatting as if callingsetGroupingUsed(false).The value passed in is converted to a byte, which may lose information. Values that are negative or greater than
Byte.MAX_VALUE, will throw anIllegalArgumentException.- Parameters:
newValue- the new grouping size- Throws:
IllegalArgumentException- ifnewValueis negative or greater thanByte.MAX_VALUE- See Also:
-
isDecimalSeparatorAlwaysShown
public boolean isDecimalSeparatorAlwaysShown()Allows you to get the behavior of the decimal separator with integers. (The decimal separator will always appear with decimals.)Example: Decimal ON: 12345 → 12345.; OFF: 12345 → 12345
- Returns:
trueif the decimal separator is always shown;falseotherwise
-
setDecimalSeparatorAlwaysShown
public void setDecimalSeparatorAlwaysShown(boolean newValue) Allows you to set the behavior of the decimal separator with integers. (The decimal separator will always appear with decimals.)Example: Decimal ON: 12345 → 12345.; OFF: 12345 → 12345
- Parameters:
newValue-trueif the decimal separator is always shown;falseotherwise
-
isStrict
public boolean isStrict()Returnstrueif this format will parse numbers strictly;falseotherwise.- Overrides:
isStrictin classNumberFormat- Returns:
trueif this format will parse numbers strictly;falseotherwise- Since:
- 23
- See Also:
-
setStrict
public void setStrict(boolean strict) Change the leniency value for parsing. Parsing can either be strict or lenient, by default it is lenient.- Overrides:
setStrictin classNumberFormat- Parameters:
strict-trueif parsing should be done strictly;falseotherwise- Since:
- 23
- See Also:
-
isParseBigDecimal
public boolean isParseBigDecimal()Returns whether theparse(java.lang.String, java.text.ParsePosition)method returnsBigDecimal. The default value is false.- Returns:
trueif the parse method returns BigDecimal;falseotherwise- Since:
- 1.5
- See Also:
-
setParseBigDecimal
public void setParseBigDecimal(boolean newValue) Sets whether theparse(java.lang.String, java.text.ParsePosition)method returnsBigDecimal.- Parameters:
newValue-trueif the parse method returns BigDecimal;falseotherwise- Since:
- 1.5
- See Also:
-
clone
Standard override; no change in semantics.- Overrides:
clonein classNumberFormat- Returns:
- a clone of this instance.
- See Also:
-
equals
Compares the specified object with thisDecimalFormatfor equality. Returns true if the object is also aDecimalFormatand the two formats would format any value the same.- Overrides:
equalsin classNumberFormat- Implementation Requirements:
- This method performs an equality check with a notion of class
identity based on
getClass(), rather thaninstanceof. Therefore, in the equals methods in subclasses, no instance of this class should compare as equal to an instance of a subclass. - Parameters:
obj- object to be compared for equality- Returns:
trueif the specified object is equal to thisDecimalFormat- See Also:
-
hashCode
public int hashCode()Returns the hash code for thisDecimalFormat.- Overrides:
hashCodein classNumberFormat- Implementation Requirements:
- This method calculates the hash code value using the values returned from
getPositivePrefix()andNumberFormat.hashCode(). - Returns:
- the hash code for this
DecimalFormat - See Also:
-
toString
-
toPattern
Synthesizes a pattern string that represents the current state of this Format object.- Returns:
- a pattern string
- See Also:
-
toLocalizedPattern
Synthesizes a localized pattern string that represents the current state of this Format object.- Returns:
- a localized pattern string
- See Also:
-
applyPattern
Apply the given pattern to this Format object. A pattern is a short-hand specification for the various formatting properties. These properties can also be changed individually through the various setter methods.The number of maximum integer digits is usually not derived from the pattern. See the note in the
Patternssection for more detail. For negative numbers, use a second pattern, separated by a semicolonExample
"#,#00.0#"→ 1,234.56This means a minimum of 2 integer digits, 1 fraction digit, and a maximum of 2 fraction digits.
Example:
"#,#00.0#;(#,#00.0#)"for negatives in parentheses.In negative patterns, the minimum and maximum counts are ignored; these are presumed to be set in the positive pattern.
- Parameters:
pattern- a new pattern- Throws:
NullPointerException- ifpatternis nullIllegalArgumentException- if the given pattern is invalid.
-
applyLocalizedPattern
Apply the given pattern to this Format object. The pattern is assumed to be in a localized notation. A pattern is a short-hand specification for the various formatting properties. These properties can also be changed individually through the various setter methods.The number of maximum integer digits is usually not derived from the pattern. See the note in the
Patternssection for more detail. For negative numbers, use a second pattern, separated by a semicolonExample
"#,#00.0#"→ 1,234.56This means a minimum of 2 integer digits, 1 fraction digit, and a maximum of 2 fraction digits.
Example:
"#,#00.0#;(#,#00.0#)"for negatives in parentheses.In negative patterns, the minimum and maximum counts are ignored; these are presumed to be set in the positive pattern.
- Parameters:
pattern- a new pattern- Throws:
NullPointerException- ifpatternis nullIllegalArgumentException- if the given pattern is invalid.
-
setMaximumIntegerDigits
public void setMaximumIntegerDigits(int newValue) Sets the maximum number of digits allowed in the integer portion of a number during formatting.maximumIntegerDigitsmust be ≥minimumIntegerDigits. If the new value formaximumIntegerDigitsis less than the current value ofminimumIntegerDigits, thenminimumIntegerDigitswill also be set to the new value. Negative input values are replaced with 0.- Overrides:
setMaximumIntegerDigitsin classNumberFormat- Parameters:
newValue- the maximum number of integer digits to be shown.- See Also:
-
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue) Sets the minimum number of digits allowed in the integer portion of a number during formatting.minimumIntegerDigitsmust be ≤maximumIntegerDigits. If the new value forminimumIntegerDigitsexceeds the current value ofmaximumIntegerDigits, thenmaximumIntegerDigitswill also be set to the new value. Negative input values are replaced with 0.- Overrides:
setMinimumIntegerDigitsin classNumberFormat- Parameters:
newValue- the minimum number of integer digits to be shown.- See Also:
-
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue) Sets the maximum number of digits allowed in the fraction portion of a number during formatting.maximumFractionDigitsmust be ≥minimumFractionDigits. If the new value formaximumFractionDigitsis less than the current value ofminimumFractionDigits, thenminimumFractionDigitswill also be set to the new value. Negative input values are replaced with 0.- Overrides:
setMaximumFractionDigitsin classNumberFormat- Parameters:
newValue- the maximum number of fraction digits to be shown.- See Also:
-
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue) Sets the minimum number of digits allowed in the fraction portion of a number during formatting.minimumFractionDigitsmust be ≤maximumFractionDigits. If the new value forminimumFractionDigitsexceeds the current value ofmaximumFractionDigits, thenmaximumFractionDigitswill also be set to the new value. Negative input values are replaced with 0.- Overrides:
setMinimumFractionDigitsin classNumberFormat- Parameters:
newValue- the minimum number of fraction digits to be shown.- See Also:
-
getMaximumIntegerDigits
public int getMaximumIntegerDigits()Returns the maximum number of digits allowed in the integer portion of a number during formatting.Unlike the other digit limits,
maximumIntegerDigitsis not updated byDecimalFormatscreated or updated with a string pattern.- Overrides:
getMaximumIntegerDigitsin classNumberFormat- Returns:
- the maximum number of digits
- See Also:
-
getMinimumIntegerDigits
public int getMinimumIntegerDigits()Returns the minimum number of digits allowed in the integer portion of a number during formatting.- Overrides:
getMinimumIntegerDigitsin classNumberFormat- Returns:
- the minimum number of digits
- See Also:
-
getMaximumFractionDigits
public int getMaximumFractionDigits()Returns the maximum number of digits allowed in the fraction portion of a number during formatting.- Overrides:
getMaximumFractionDigitsin classNumberFormat- Returns:
- the maximum number of digits.
- See Also:
-
getMinimumFractionDigits
public int getMinimumFractionDigits()Returns the minimum number of digits allowed in the fraction portion of a number during formatting.- Overrides:
getMinimumFractionDigitsin classNumberFormat- Returns:
- the minimum number of digits
- See Also:
-
getCurrency
Gets the currency used by this decimal format when formatting currency values. The currency is obtained by callingDecimalFormatSymbols.getCurrencyon this number format's symbols.- Overrides:
getCurrencyin classNumberFormat- Returns:
- the currency used by this decimal format, or
null - Since:
- 1.4
-
setCurrency
Sets the currency used by this number format when formatting currency values. This does not update the minimum or maximum number of fraction digits used by the number format. The currency is set by callingDecimalFormatSymbols.setCurrencyon this number format's symbols.- Overrides:
setCurrencyin classNumberFormat- Parameters:
currency- the new currency to be used by this decimal format- Throws:
NullPointerException- ifcurrencyis null- Since:
- 1.4
-
getRoundingMode
Gets theRoundingModeused in this DecimalFormat.- Overrides:
getRoundingModein classNumberFormat- Returns:
- The
RoundingModeused for this DecimalFormat. - Since:
- 1.6
- See Also:
-
setRoundingMode
Sets theRoundingModeused in this DecimalFormat.- Overrides:
setRoundingModein classNumberFormat- Parameters:
roundingMode- TheRoundingModeto be used- Throws:
NullPointerException- ifroundingModeis null.- Since:
- 1.6
- See Also:
-