NumberFormatter
public
final
class
NumberFormatter
extends Object
java.lang.Object | |
↳ | android.icu.number.NumberFormatter |
All-in-one formatter for localized numbers, currencies, and units.
For a full list of options, see NumberFormatterSettings
.
// Most basic usage: NumberFormatter.withLocale(...).format(123).toString(); // 1,234 in en-US // Custom notation, unit, and rounding strategy: NumberFormatter.with() .notation(Notation.compactShort()) .unit(Currency.getInstance("EUR")) .precision(Precision.maxDigits(2)) .locale(...) .format(1234) .toString(); // \u20ac1.2K in en-US // Create a formatter in a private static final field: private static final LocalizedNumberFormatter formatter = NumberFormatter.withLocale(...) .unit(NoUnit.PERCENT) .precision(Precision.fixedFraction(3)); formatter.format(5.9831).toString(); // 5.983% in en-US // Create a "template" in a private static final field but without setting a locale until the call site: private static final UnlocalizedNumberFormatter template = NumberFormatter.with() .sign(SignDisplay.ALWAYS) .unitWidth(UnitWidth.FULL_NAME); template.locale(...).format(new Measure(1234, MeasureUnit.METER)).toString(); // +1,234 meters in en-US
This API offers more features than DecimalFormat
and is geared toward new
users of ICU.
NumberFormatter instances (i.e., LocalizedNumberFormatter and UnlocalizedNumberFormatter) are immutable and thread safe. This means that invoking a configuration method has no effect on the receiving instance; you must store and use the new number formatter instance it returns instead.
UnlocalizedNumberFormatter formatter = UnlocalizedNumberFormatter.with() .notation(Notation.scientific()); formatter.precision(Precision.maxFraction(2)); // does nothing! formatter.locale(ULocale.ENGLISH).format(9.8765).toString(); // prints "9.8765E0", not "9.88E0"
This API is based on the fluent design pattern popularized by libraries such as Google's Guava. For extensive details on the design of this API, read the design doc.
Note: To format monetary/currency values, specify the currency in the `.unit()` function.
Summary
Public methods | |
---|---|
static
UnlocalizedNumberFormatter
|
with()
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is not currently known at the call site. |
static
LocalizedNumberFormatter
|
withLocale(Locale locale)
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call site. |
static
LocalizedNumberFormatter
|
withLocale(ULocale locale)
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call site. |
Inherited methods | |
---|---|
Public methods
with
public static UnlocalizedNumberFormatter with ()
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is not currently known at the call site.
Returns | |
---|---|
UnlocalizedNumberFormatter |
An UnlocalizedNumberFormatter , to be used for chaining. |
withLocale
public static LocalizedNumberFormatter withLocale (Locale locale)
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call site.
Parameters | |
---|---|
locale |
Locale : The locale from which to load formats and symbols for number formatting. |
Returns | |
---|---|
LocalizedNumberFormatter |
A LocalizedNumberFormatter , to be used for chaining. |
withLocale
public static LocalizedNumberFormatter withLocale (ULocale locale)
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call site.
Parameters | |
---|---|
locale |
ULocale : The locale from which to load formats and symbols for number formatting. |
Returns | |
---|---|
LocalizedNumberFormatter |
A LocalizedNumberFormatter , to be used for chaining. |