Package com.ibm.icu.number
Class NumberFormatter
- java.lang.Object
-
- com.ibm.icu.number.NumberFormatter
-
public final class NumberFormatter extends java.lang.Object
All-in-one formatter for localized numbers, currencies, and units. For a full list of options, seeNumberFormatterSettings
.// 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
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.
- Author:
- Shane Carr
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
NumberFormatter.DecimalSeparatorDisplay
An enum declaring how to render the decimal separator.static class
NumberFormatter.GroupingStrategy
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).static class
NumberFormatter.RoundingPriority
An enum declaring how to resolve conflicts between maximum fraction digits and maximum significant digits.static class
NumberFormatter.SignDisplay
An enum declaring how to denote positive and negative numbers.static class
NumberFormatter.TrailingZeroDisplay
An enum declaring how to render trailing zeros.static class
NumberFormatter.UnitWidth
An enum declaring how to render units, including currencies.
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static UnlocalizedNumberFormatter
forSkeleton(java.lang.String skeleton)
Call this method at the beginning of a NumberFormatter fluent chain to create an instance based on a given number skeleton string.static UnlocalizedNumberFormatter
fromDecimalFormat(com.ibm.icu.impl.number.DecimalFormatProperties properties, DecimalFormatSymbols symbols, com.ibm.icu.impl.number.DecimalFormatProperties exportedProperties)
Deprecated.ICU 60 This API is ICU internal only.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(ULocale 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(java.util.Locale locale)
Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call site.
-
-
-
Method Detail
-
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:
- An
UnlocalizedNumberFormatter
, to be used for chaining.
-
withLocale
public static LocalizedNumberFormatter withLocale(java.util.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
- The locale from which to load formats and symbols for number formatting.- Returns:
- 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
- The locale from which to load formats and symbols for number formatting.- Returns:
- A
LocalizedNumberFormatter
, to be used for chaining.
-
forSkeleton
public static UnlocalizedNumberFormatter forSkeleton(java.lang.String skeleton)
Call this method at the beginning of a NumberFormatter fluent chain to create an instance based on a given number skeleton string. For more information on number skeleton strings, see: https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html- Parameters:
skeleton
- The skeleton string off of which to base this NumberFormatter.- Returns:
- An
UnlocalizedNumberFormatter
, to be used for chaining. - Throws:
SkeletonSyntaxException
- If the given string is not a valid number formatting skeleton.
-
fromDecimalFormat
@Deprecated public static UnlocalizedNumberFormatter fromDecimalFormat(com.ibm.icu.impl.number.DecimalFormatProperties properties, DecimalFormatSymbols symbols, com.ibm.icu.impl.number.DecimalFormatProperties exportedProperties)
Deprecated.ICU 60 This API is ICU internal only.Note: In Java, since NumberPropertyMapper is package-private, this method is here so that it is accessible to tests.
-
-