Class NumberFormatterSettings<T extends NumberFormatterSettings<?>>
- Direct Known Subclasses:
LocalizedNumberFormatter
,UnlocalizedNumberFormatter
UnlocalizedNumberFormatter
and LocalizedNumberFormatter
. This class is not intended
for public subclassing.- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
(package private) static final int
private final NumberFormatterSettings
<?> private MacroProps
private final Object
-
Constructor Summary
ConstructorsConstructorDescriptionNumberFormatterSettings
(NumberFormatterSettings<?> parent, int key, Object value) -
Method Summary
Modifier and TypeMethodDescription(package private) abstract T
Sets the decimal separator display strategy.displayOptions
(DisplayOptions displayOptions) Specifies theDisplayOptions
.boolean
grouping
(NumberFormatter.GroupingStrategy strategy) Specifies the grouping strategy to use when formatting numbers.int
hashCode()
integerWidth
(IntegerWidth style) Specifies the minimum and maximum number of digits to render before the decimal mark.macros
(MacroProps macros) Deprecated.ICU 60 This API is ICU internal only.Specifies the notation style (simple, scientific, or compact) for rendering numbers.Deprecated.ICU 60 This API is ICU internal only.perUnit
(MeasureUnit perUnit) Sets a unit to be used in the denominator.Specifies the rounding precision to use when formatting numbers.(package private) MacroProps
resolve()
roundingMode
(RoundingMode roundingMode) Specifies how to determine the direction to round a number when it has more digits than fit in the desired precision.Sets a scale (multiplier) to be used to scale the number by an arbitrary amount before formatting.sign
(NumberFormatter.SignDisplay style) Sets the plus/minus sign display strategy.symbols
(DecimalFormatSymbols symbols) Specifies the symbols (decimal separator, grouping separator, percent sign, numerals, etc.) to use when rendering numbers.Specifies that the given numbering system should be used when fetching symbols.Deprecated.ICU 60 This API is ICU internal only.Creates a skeleton string representation of this number formatter.unit
(MeasureUnit unit) Specifies the unit (unit of measure, currency, or percent) to associate with rendered numbers.unitDisplayCase
(String unitDisplayCase) Deprecated.This API is for technology preview only.Sets the width of the unit (measure unit or currency).Specifies the usage for which numbers will be formatted ("person-height", "road", "rainfall", etc.)
-
Field Details
-
KEY_MACROS
static final int KEY_MACROS- See Also:
-
KEY_LOCALE
static final int KEY_LOCALE- See Also:
-
KEY_NOTATION
static final int KEY_NOTATION- See Also:
-
KEY_UNIT
static final int KEY_UNIT- See Also:
-
KEY_PRECISION
static final int KEY_PRECISION- See Also:
-
KEY_ROUNDING_MODE
static final int KEY_ROUNDING_MODE- See Also:
-
KEY_GROUPING
static final int KEY_GROUPING- See Also:
-
KEY_PADDER
static final int KEY_PADDER- See Also:
-
KEY_INTEGER
static final int KEY_INTEGER- See Also:
-
KEY_SYMBOLS
static final int KEY_SYMBOLS- See Also:
-
KEY_UNIT_WIDTH
static final int KEY_UNIT_WIDTH- See Also:
-
KEY_SIGN
static final int KEY_SIGN- See Also:
-
KEY_DECIMAL
static final int KEY_DECIMAL- See Also:
-
KEY_SCALE
static final int KEY_SCALE- See Also:
-
KEY_THRESHOLD
static final int KEY_THRESHOLD- See Also:
-
KEY_PER_UNIT
static final int KEY_PER_UNIT- See Also:
-
KEY_USAGE
static final int KEY_USAGE- See Also:
-
KEY_UNIT_DISPLAY_CASE
static final int KEY_UNIT_DISPLAY_CASE- See Also:
-
KEY_MAX
static final int KEY_MAX- See Also:
-
parent
-
key
private final int key -
value
-
resolvedMacros
-
-
Constructor Details
-
NumberFormatterSettings
NumberFormatterSettings(NumberFormatterSettings<?> parent, int key, Object value)
-
-
Method Details
-
notation
Specifies the notation style (simple, scientific, or compact) for rendering numbers.- Simple notation: "12,300"
- Scientific notation: "1.23E4"
- Compact notation: "12K"
All notation styles will be properly localized with locale data, and all notation styles are compatible with units, rounding strategies, and other number formatter settings.
Pass this method the return value of a
Notation
factory method. For example:NumberFormatter.with().notation(Notation.compactShort())
The default is to use simple notation.- Parameters:
notation
- The notation strategy to use.- Returns:
- The fluent chain.
- See Also:
-
unit
Specifies the unit (unit of measure, currency, or percent) to associate with rendered numbers.- Unit of measure: "12.3 meters"
- Currency: "$12.30"
- Percent: "12.3%"
Note: The unit can also be specified by passing a
Measure
toLocalizedNumberFormatter.format(Measure)
. Units specified via the format method take precedence over units specified here. This setter is designed for situations when the unit is constant for the duration of the number formatting process.All units will be properly localized with locale data, and all units are compatible with notation styles, rounding strategies, and other number formatter settings.
Pass this method any instance of
MeasureUnit
. For units of measure:NumberFormatter.with().unit(MeasureUnit.METER)
Currency:NumberFormatter.with().unit(Currency.getInstance("USD"))
Percent:NumberFormatter.with().unit(NoUnit.PERCENT)
See
perUnit(com.ibm.icu.util.MeasureUnit)
for information on how to format strings like "5 meters per second".The default is to render without units (equivalent to
NoUnit.BASE
).If the input usage is correctly set the output unit will change according to
usage
,locale
andunit
value.- Parameters:
unit
- The unit to render.- Returns:
- The fluent chain.
- See Also:
-
perUnit
Sets a unit to be used in the denominator. For example, to format "3 m/s", pass METER to the unit and SECOND to the perUnit.Pass this method any instance of
MeasureUnit
. For example:NumberFormatter.with().unit(MeasureUnit.METER).perUnit(MeasureUnit.SECOND)
The default is not to display any unit in the denominator.
If a per-unit is specified without a primary unit via
unit(com.ibm.icu.util.MeasureUnit)
, the behavior is undefined.- Parameters:
perUnit
- The unit to render in the denominator.- Returns:
- The fluent chain
- See Also:
-
precision
Specifies the rounding precision to use when formatting numbers.- Round to 3 decimal places: "3.142"
- Round to 3 significant figures: "3.14"
- Round to the closest nickel: "3.15"
- Do not perform rounding: "3.1415926..."
Pass this method the return value of one of the factory methods on
Precision
. For example:NumberFormatter.with().precision(Precision.fixedFraction(2))
In most cases, the default rounding precision is to round to 6 fraction places; i.e.,
Precision.maxFraction(6)
. The exceptions are if compact notation is being used, then the compact notation rounding precision is used (seeNotation.compactShort()
for details), or if the unit is a currency, then standard currency rounding is used, which varies from currency to currency (seePrecision.currency(com.ibm.icu.util.Currency.CurrencyUsage)
for details).- Parameters:
precision
- The rounding precision to use.- Returns:
- The fluent chain.
- See Also:
-
roundingMode
Specifies how to determine the direction to round a number when it has more digits than fit in the desired precision. When formatting 1.235:- Ceiling rounding mode with integer precision: "2"
- Half-down rounding mode with 2 fixed fraction digits: "1.23"
- Half-up rounding mode with 2 fixed fraction digits: "1.24"
- Parameters:
roundingMode
- The rounding mode to use.- Returns:
- The fluent chain.
- See Also:
-
grouping
Specifies the grouping strategy to use when formatting numbers.- Default grouping: "12,300" and "1,230"
- Grouping with at least 2 digits: "12,300" and "1230"
- No grouping: "12300" and "1230"
The exact grouping widths will be chosen based on the locale.
Pass this method an element from the
NumberFormatter.GroupingStrategy
enum. For example:NumberFormatter.with().grouping(GroupingStrategy.MIN2)
The default is to perform grouping according to locale data; most locales, but not all locales, enable it by default.- Parameters:
strategy
- The grouping strategy to use.- Returns:
- The fluent chain.
- See Also:
-
integerWidth
Specifies the minimum and maximum number of digits to render before the decimal mark.- Zero minimum integer digits: ".08"
- One minimum integer digit: "0.08"
- Two minimum integer digits: "00.08"
Pass this method the return value of
IntegerWidth.zeroFillTo(int)
. For example:NumberFormatter.with().integerWidth(IntegerWidth.zeroFillTo(2))
The default is to have one minimum integer digit.- Parameters:
style
- The integer width to use.- Returns:
- The fluent chain.
- See Also:
-
symbols
Specifies the symbols (decimal separator, grouping separator, percent sign, numerals, etc.) to use when rendering numbers.- en_US symbols: "12,345.67"
- fr_FR symbols: "12 345,67"
- de_CH symbols: "12’345.67"
- my_MY symbols: "၁၂,၃၄၅.၆၇"
Pass this method an instance of
DecimalFormatSymbols
. For example:NumberFormatter.with().symbols(DecimalFormatSymbols.getInstance(new ULocale("de_CH")))
Note: DecimalFormatSymbols automatically chooses the best numbering system based on the locale. In the examples above, the first three are using the Latin numbering system, and the fourth is using the Myanmar numbering system.
Note: The instance of DecimalFormatSymbols will be copied: changes made to the symbols object after passing it into the fluent chain will not be seen.
Note: Calling this method will override the NumberingSystem previously specified in
symbols(NumberingSystem)
.The default is to choose the symbols based on the locale specified in the fluent chain.
- Parameters:
symbols
- The DecimalFormatSymbols to use.- Returns:
- The fluent chain.
- See Also:
-
symbols
Specifies that the given numbering system should be used when fetching symbols.- Latin numbering system: "12,345"
- Myanmar numbering system: "၁၂,၃၄၅"
- Math Sans Bold numbering system: "𝟭𝟮,𝟯𝟰𝟱"
Pass this method an instance of
NumberingSystem
. For example, to force the locale to always use the Latin alphabet numbering system (ASCII digits):NumberFormatter.with().symbols(NumberingSystem.LATIN)
Note: Calling this method will override the DecimalFormatSymbols previously specified in
symbols(DecimalFormatSymbols)
.The default is to choose the best numbering system for the locale.
- Parameters:
ns
- The NumberingSystem to use.- Returns:
- The fluent chain.
- See Also:
-
unitWidth
Sets the width of the unit (measure unit or currency). Most common values:- Short: "$12.00", "12 m"
- ISO Code: "USD 12.00"
- Full name: "12.00 US dollars", "12 meters"
Pass an element from the
NumberFormatter.UnitWidth
enum to this setter. For example:NumberFormatter.with().unitWidth(UnitWidth.FULL_NAME)
The default is the SHORT width.
- Parameters:
style
- The width to use when rendering numbers.- Returns:
- The fluent chain
- See Also:
-
sign
Sets the plus/minus sign display strategy. Most common values:- Auto: "123", "-123"
- Always: "+123", "-123"
- Accounting: "$123", "($123)"
Pass an element from the
NumberFormatter.SignDisplay
enum to this setter. For example:NumberFormatter.with().sign(SignDisplay.ALWAYS)
The default is AUTO sign display.
- Parameters:
style
- The sign display strategy to use when rendering numbers.- Returns:
- The fluent chain
- See Also:
-
decimal
Sets the decimal separator display strategy. This affects integer numbers with no fraction part. Most common values:- Auto: "1"
- Always: "1."
Pass an element from the
NumberFormatter.DecimalSeparatorDisplay
enum to this setter. For example:NumberFormatter.with().decimal(DecimalSeparatorDisplay.ALWAYS)
The default is AUTO decimal separator display.
- Parameters:
style
- The decimal separator display strategy to use when rendering numbers.- Returns:
- The fluent chain
- See Also:
-
scale
Sets a scale (multiplier) to be used to scale the number by an arbitrary amount before formatting. Most common values:- Multiply by 100: useful for percentages.
- Multiply by an arbitrary value: useful for unit conversions.
Pass an element from a
Scale
factory method to this setter. For example:NumberFormatter.with().scale(Scale.powerOfTen(2))
The default is to not apply any multiplier.
- Parameters:
scale
- An amount to be multiplied against numbers before formatting.- Returns:
- The fluent chain
- See Also:
-
usage
Specifies the usage for which numbers will be formatted ("person-height", "road", "rainfall", etc.)When a
usage
is specified, the output unit will change depending on theLocale
and the unit quantity. For example, formatting length measurements specified in meters:NumberFormatter.with().usage("person").unit(MeasureUnit.METER).locale(new ULocale("en-US"))
- When formatting 0.25, the output will be "10 inches".
- When formatting 1.50, the output will be "4 feet and 11 inches".
The input unit specified via unit() determines the type of measurement being formatted (e.g. "length" when the unit is "foot"). The usage requested will be looked for only within this category of measurement units.
The output unit can be found via FormattedNumber.getOutputUnit().
If the usage has multiple parts (e.g. "land-agriculture-grain") and does not match a known usage preference, the last part will be dropped repeatedly until a match is found (e.g. trying "land-agriculture", then "land"). If a match is still not found, usage will fall back to "default".
Setting usage to an empty string clears the usage (disables usage-based localized formatting).
Setting a usage string but not a correct input unit will result in an U_ILLEGAL_ARGUMENT_ERROR.
When using usage, specifying rounding or precision is unnecessary. Specifying a precision in some manner will override the default formatting.
- Parameters:
usage
- A usage parameter from the units resource.- Returns:
- The fluent chain
- Throws:
IllegalArgumentException
- in case of Setting a usage string but not a correct input unit.
-
displayOptions
Specifies theDisplayOptions
. For example,GrammaticalCase
specifies the desired case for a unit formatter's output (e.g. accusative, dative, genitive).- Returns:
- The fluent chain.
-
unitDisplayCase
Deprecated.This API is for technology preview only.Specifies the desired case for a unit formatter's output (e.g. accusative, dative, genitive).- Returns:
- The fluent chain
-
macros
Deprecated.ICU 60 This API is ICU internal only.Internal method to set a starting macros. -
padding
Deprecated.ICU 60 This API is ICU internal only.Set the padding strategy. May be added to ICU 61; see #13338. -
threshold
Deprecated.ICU 60 This API is ICU internal only.Internal fluent setter to support a custom regulation threshold. A threshold of 1 causes the data structures to be built right away. A threshold of 0 prevents the data structures from being built. -
toSkeleton
Creates a skeleton string representation of this number formatter. A skeleton string is a locale-agnostic serialized form of a number formatter.Not all options are capable of being represented in the skeleton string; for example, a DecimalFormatSymbols object. If any such option is encountered, an
UnsupportedOperationException
is thrown.The returned skeleton is in normalized form, such that two number formatters with equivalent behavior should produce the same skeleton.
For more information on number skeleton strings, see: https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html
- Returns:
- A number skeleton string with behavior corresponding to this number formatter.
- Throws:
UnsupportedOperationException
- If the number formatter has an option that cannot be represented in a skeleton string.
-
create
-
resolve
MacroProps resolve() -
hashCode
public int hashCode() -
equals
-