Added in API level 30

NumberFormatter

class NumberFormatter
kotlin.Any
   ↳ 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();  // €1.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 android.icu.text.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.

Summary

Nested classes

An enum declaring how to render the decimal separator.

An enum declaring the strategy for when and how to display grouping separators (i.e., the separator, often a comma or period, after every 2-3 powers of ten).

An enum declaring how to resolve conflicts between maximum fraction digits and maximum significant digits.

An enum declaring how to denote positive and negative numbers.

An enum declaring how to render trailing zeros.

An enum declaring how to render units, including currencies.

Public methods
static UnlocalizedNumberFormatter!

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(locale: ULocale!)

Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call site.

Public methods

with

Added in API level 30
static fun with(): UnlocalizedNumberFormatter!

Call this method at the beginning of a NumberFormatter fluent chain in which the locale is not currently known at the call site.

Return
UnlocalizedNumberFormatter! An UnlocalizedNumberFormatter, to be used for chaining.

withLocale

Added in API level 30
static fun withLocale(locale: Locale!): LocalizedNumberFormatter!

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.
Return
LocalizedNumberFormatter! A LocalizedNumberFormatter, to be used for chaining.

withLocale

Added in API level 30
static fun withLocale(locale: ULocale!): LocalizedNumberFormatter!

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.
Return
LocalizedNumberFormatter! A LocalizedNumberFormatter, to be used for chaining.