ICU 57.1  57.1
decimfmt.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2016, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 ********************************************************************************
6 *
7 * File DECIMFMT.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 02/19/97 aliu Converted from java.
13 * 03/20/97 clhuang Updated per C++ implementation.
14 * 04/03/97 aliu Rewrote parsing and formatting completely, and
15 * cleaned up and debugged. Actually works now.
16 * 04/17/97 aliu Changed DigitCount to int per code review.
17 * 07/10/97 helena Made ParsePosition a class and get rid of the function
18 * hiding problems.
19 * 09/09/97 aliu Ported over support for exponential formats.
20 * 07/20/98 stephen Changed documentation
21 * 01/30/13 emmons Added Scaling methods
22 ********************************************************************************
23 */
24 
25 #ifndef DECIMFMT_H
26 #define DECIMFMT_H
27 
28 #include "unicode/utypes.h"
34 #if !UCONFIG_NO_FORMATTING
35 
36 #include "unicode/dcfmtsym.h"
37 #include "unicode/numfmt.h"
38 #include "unicode/locid.h"
39 #include "unicode/fpositer.h"
40 #include "unicode/stringpiece.h"
41 #include "unicode/curramt.h"
42 #include "unicode/enumset.h"
43 
44 #ifndef U_HIDE_INTERNAL_API
45 
49 #if UCONFIG_FORMAT_FASTPATHS_49
50 #define UNUM_DECIMALFORMAT_INTERNAL_SIZE 16
51 #endif
52 #endif /* U_HIDE_INTERNAL_API */
53 
55 
56 class DigitList;
57 class CurrencyPluralInfo;
58 class Hashtable;
59 class UnicodeSet;
60 class FieldPositionHandler;
61 class DecimalFormatStaticSets;
62 class FixedDecimal;
63 class DecimalFormatImpl;
64 class PluralRules;
65 class VisibleDigitsWithExponent;
66 
67 // explicit template instantiation. see digitlst.h
68 #if defined (_MSC_VER)
69 template class U_I18N_API EnumSet<UNumberFormatAttribute,
72 #endif
73 
668 public:
678  kRoundHalfEven,
680  kRoundHalfDown,
682  kRoundHalfUp,
688  kRoundUnnecessary
689  };
690 
696  kPadBeforePrefix,
697  kPadAfterPrefix,
698  kPadBeforeSuffix,
699  kPadAfterSuffix
700  };
701 
715  DecimalFormat(UErrorCode& status);
716 
731  DecimalFormat(const UnicodeString& pattern,
732  UErrorCode& status);
733 
752  DecimalFormat( const UnicodeString& pattern,
753  DecimalFormatSymbols* symbolsToAdopt,
754  UErrorCode& status);
755 
756 #ifndef U_HIDE_INTERNAL_API
757 
769  DecimalFormat( const UnicodeString& pattern,
770  DecimalFormatSymbols* symbolsToAdopt,
771  UNumberFormatStyle style,
772  UErrorCode& status);
773 
774 #if UCONFIG_HAVE_PARSEALLINPUT
775 
778  void setParseAllInput(UNumberFormatAttributeValue value);
779 #endif
780 
781 #endif /* U_HIDE_INTERNAL_API */
782 
783 
794  virtual DecimalFormat& setAttribute( UNumberFormatAttribute attr,
795  int32_t newvalue,
796  UErrorCode &status);
797 
807  virtual int32_t getAttribute( UNumberFormatAttribute attr,
808  UErrorCode &status) const;
809 
810 
817  virtual void setGroupingUsed(UBool newValue);
818 
826  virtual void setParseIntegerOnly(UBool value);
827 
837  virtual void setContext(UDisplayContext value, UErrorCode& status);
838 
858  DecimalFormat( const UnicodeString& pattern,
859  DecimalFormatSymbols* symbolsToAdopt,
860  UParseError& parseError,
861  UErrorCode& status);
879  DecimalFormat( const UnicodeString& pattern,
880  const DecimalFormatSymbols& symbols,
881  UErrorCode& status);
882 
889  DecimalFormat(const DecimalFormat& source);
890 
898 
903  virtual ~DecimalFormat();
904 
912  virtual Format* clone(void) const;
913 
922  virtual UBool operator==(const Format& other) const;
923 
924 
925  using NumberFormat::format;
926 
938  virtual UnicodeString& format(double number,
939  UnicodeString& appendTo,
940  FieldPosition& pos) const;
941 
942 
955  virtual UnicodeString& format(double number,
956  UnicodeString& appendTo,
957  FieldPosition& pos,
958  UErrorCode &status) const;
959 
973  virtual UnicodeString& format(double number,
974  UnicodeString& appendTo,
975  FieldPositionIterator* posIter,
976  UErrorCode& status) const;
977 
989  virtual UnicodeString& format(int32_t number,
990  UnicodeString& appendTo,
991  FieldPosition& pos) const;
992 
1004  virtual UnicodeString& format(int32_t number,
1005  UnicodeString& appendTo,
1006  FieldPosition& pos,
1007  UErrorCode &status) const;
1008 
1022  virtual UnicodeString& format(int32_t number,
1023  UnicodeString& appendTo,
1024  FieldPositionIterator* posIter,
1025  UErrorCode& status) const;
1026 
1038  virtual UnicodeString& format(int64_t number,
1039  UnicodeString& appendTo,
1040  FieldPosition& pos) const;
1041 
1053  virtual UnicodeString& format(int64_t number,
1054  UnicodeString& appendTo,
1055  FieldPosition& pos,
1056  UErrorCode &status) const;
1057 
1071  virtual UnicodeString& format(int64_t number,
1072  UnicodeString& appendTo,
1073  FieldPositionIterator* posIter,
1074  UErrorCode& status) const;
1075 
1092  virtual UnicodeString& format(const StringPiece &number,
1093  UnicodeString& appendTo,
1094  FieldPositionIterator* posIter,
1095  UErrorCode& status) const;
1096 
1097 
1113  virtual UnicodeString& format(const DigitList &number,
1114  UnicodeString& appendTo,
1115  FieldPositionIterator* posIter,
1116  UErrorCode& status) const;
1117 
1129  virtual UnicodeString& format(
1130  const VisibleDigitsWithExponent &number,
1131  UnicodeString& appendTo,
1132  FieldPosition& pos,
1133  UErrorCode& status) const;
1134 
1146  virtual UnicodeString& format(
1147  const VisibleDigitsWithExponent &number,
1148  UnicodeString& appendTo,
1149  FieldPositionIterator* posIter,
1150  UErrorCode& status) const;
1151 
1167  virtual UnicodeString& format(const DigitList &number,
1168  UnicodeString& appendTo,
1169  FieldPosition& pos,
1170  UErrorCode& status) const;
1171 
1172  using NumberFormat::parse;
1173 
1193  virtual void parse(const UnicodeString& text,
1194  Formattable& result,
1195  ParsePosition& parsePosition) const;
1196 
1216  virtual CurrencyAmount* parseCurrency(const UnicodeString& text,
1217  ParsePosition& pos) const;
1218 
1226  virtual const DecimalFormatSymbols* getDecimalFormatSymbols(void) const;
1227 
1234  virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt);
1235 
1242  virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols);
1243 
1244 
1251  virtual const CurrencyPluralInfo* getCurrencyPluralInfo(void) const;
1252 
1259  virtual void adoptCurrencyPluralInfo(CurrencyPluralInfo* toAdopt);
1260 
1267  virtual void setCurrencyPluralInfo(const CurrencyPluralInfo& info);
1268 
1269 
1278  UnicodeString& getPositivePrefix(UnicodeString& result) const;
1279 
1287  virtual void setPositivePrefix(const UnicodeString& newValue);
1288 
1297  UnicodeString& getNegativePrefix(UnicodeString& result) const;
1298 
1306  virtual void setNegativePrefix(const UnicodeString& newValue);
1307 
1316  UnicodeString& getPositiveSuffix(UnicodeString& result) const;
1317 
1325  virtual void setPositiveSuffix(const UnicodeString& newValue);
1326 
1335  UnicodeString& getNegativeSuffix(UnicodeString& result) const;
1336 
1344  virtual void setNegativeSuffix(const UnicodeString& newValue);
1345 
1356  int32_t getMultiplier(void) const;
1357 
1368  virtual void setMultiplier(int32_t newValue);
1369 
1379  virtual double getRoundingIncrement(void) const;
1380 
1392  virtual void setRoundingIncrement(double newValue);
1393 
1402  virtual ERoundingMode getRoundingMode(void) const;
1403 
1412  virtual void setRoundingMode(ERoundingMode roundingMode);
1413 
1425  virtual int32_t getFormatWidth(void) const;
1426 
1441  virtual void setFormatWidth(int32_t width);
1442 
1455  virtual UnicodeString getPadCharacterString() const;
1456 
1471  virtual void setPadCharacter(const UnicodeString &padChar);
1472 
1488  virtual EPadPosition getPadPosition(void) const;
1489 
1506  virtual void setPadPosition(EPadPosition padPos);
1507 
1518  virtual UBool isScientificNotation(void) const;
1519 
1535  virtual void setScientificNotation(UBool useScientific);
1536 
1547  virtual int8_t getMinimumExponentDigits(void) const;
1548 
1561  virtual void setMinimumExponentDigits(int8_t minExpDig);
1562 
1575  virtual UBool isExponentSignAlwaysShown(void) const;
1576 
1590  virtual void setExponentSignAlwaysShown(UBool expSignAlways);
1591 
1603  int32_t getGroupingSize(void) const;
1604 
1616  virtual void setGroupingSize(int32_t newValue);
1617 
1636  int32_t getSecondaryGroupingSize(void) const;
1637 
1649  virtual void setSecondaryGroupingSize(int32_t newValue);
1650 
1651 #ifndef U_HIDE_INTERNAL_API
1652 
1674  int32_t getMinimumGroupingDigits() const;
1675 
1676 #endif /* U_HIDE_INTERNAL_API */
1677 
1678  /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual. */
1687  virtual void setMinimumGroupingDigits(int32_t newValue);
1688 
1689 
1698  UBool isDecimalSeparatorAlwaysShown(void) const;
1699 
1708  virtual void setDecimalSeparatorAlwaysShown(UBool newValue);
1709 
1716  UBool isDecimalPatternMatchRequired(void) const;
1717 
1727  virtual void setDecimalPatternMatchRequired(UBool newValue);
1728 
1729 
1740  virtual UnicodeString& toPattern(UnicodeString& result) const;
1741 
1752  virtual UnicodeString& toLocalizedPattern(UnicodeString& result) const;
1753 
1783  virtual void applyPattern(const UnicodeString& pattern,
1784  UParseError& parseError,
1785  UErrorCode& status);
1794  virtual void applyPattern(const UnicodeString& pattern,
1795  UErrorCode& status);
1796 
1827  virtual void applyLocalizedPattern(const UnicodeString& pattern,
1828  UParseError& parseError,
1829  UErrorCode& status);
1830 
1840  virtual void applyLocalizedPattern(const UnicodeString& pattern,
1841  UErrorCode& status);
1842 
1843 
1853  virtual void setMaximumIntegerDigits(int32_t newValue);
1854 
1864  virtual void setMinimumIntegerDigits(int32_t newValue);
1865 
1875  virtual void setMaximumFractionDigits(int32_t newValue);
1876 
1886  virtual void setMinimumFractionDigits(int32_t newValue);
1887 
1895  int32_t getMinimumSignificantDigits() const;
1896 
1904  int32_t getMaximumSignificantDigits() const;
1905 
1917  void setMinimumSignificantDigits(int32_t min);
1918 
1930  void setMaximumSignificantDigits(int32_t max);
1931 
1938  UBool areSignificantDigitsUsed() const;
1939 
1947  void setSignificantDigitsUsed(UBool useSignificantDigits);
1948 
1949  public:
1962  virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
1963 
1969  virtual void setCurrency(const UChar* theCurrency);
1970 
1978  void setCurrencyUsage(UCurrencyUsage newUsage, UErrorCode* ec);
1979 
1984  UCurrencyUsage getCurrencyUsage() const;
1985 
1986 
1987 #ifndef U_HIDE_DEPRECATED_API
1988 
1993  static const char fgNumberPatterns[];
1994 #endif /* U_HIDE_DEPRECATED_API */
1995 
1996 #ifndef U_HIDE_INTERNAL_API
1997 
2003  FixedDecimal getFixedDecimal(double number, UErrorCode &status) const;
2004 
2011  FixedDecimal getFixedDecimal(const Formattable &number, UErrorCode &status) const;
2012 
2019  FixedDecimal getFixedDecimal(DigitList &number, UErrorCode &status) const;
2020 
2027  VisibleDigitsWithExponent &initVisibleDigitsWithExponent(
2028  double number,
2029  VisibleDigitsWithExponent &digits,
2030  UErrorCode &status) const;
2031 
2038  VisibleDigitsWithExponent &initVisibleDigitsWithExponent(
2039  const Formattable &number,
2040  VisibleDigitsWithExponent &digits,
2041  UErrorCode &status) const;
2042 
2050  VisibleDigitsWithExponent &initVisibleDigitsWithExponent(
2051  DigitList &number,
2052  VisibleDigitsWithExponent &digits,
2053  UErrorCode &status) const;
2054 
2055 #endif /* U_HIDE_INTERNAL_API */
2056 
2057 public:
2058 
2070  static UClassID U_EXPORT2 getStaticClassID(void);
2071 
2083  virtual UClassID getDynamicClassID(void) const;
2084 
2085 private:
2086 
2087  DecimalFormat(); // default constructor not implemented
2088 
2093  void init();
2094 
2098  void construct(UErrorCode& status,
2099  UParseError& parseErr,
2100  const UnicodeString* pattern = 0,
2101  DecimalFormatSymbols* symbolsToAdopt = 0
2102  );
2103 
2104  void parse(const UnicodeString& text,
2105  Formattable& result,
2106  ParsePosition& pos,
2107  UChar* currency) const;
2108 
2109  enum {
2110  fgStatusInfinite,
2111  fgStatusLength // Leave last in list.
2112  } StatusFlags;
2113 
2114  UBool subparse(const UnicodeString& text,
2115  const UnicodeString* negPrefix,
2116  const UnicodeString* negSuffix,
2117  const UnicodeString* posPrefix,
2118  const UnicodeString* posSuffix,
2119  UBool complexCurrencyParsing,
2120  int8_t type,
2121  ParsePosition& parsePosition,
2122  DigitList& digits, UBool* status,
2123  UChar* currency) const;
2124 
2125  // Mixed style parsing for currency.
2126  // It parses against the current currency pattern
2127  // using complex affix comparison
2128  // parses against the currency plural patterns using complex affix comparison,
2129  // and parses against the current pattern using simple affix comparison.
2130  UBool parseForCurrency(const UnicodeString& text,
2131  ParsePosition& parsePosition,
2132  DigitList& digits,
2133  UBool* status,
2134  UChar* currency) const;
2135 
2136  int32_t skipPadding(const UnicodeString& text, int32_t position) const;
2137 
2138  int32_t compareAffix(const UnicodeString& input,
2139  int32_t pos,
2140  UBool isNegative,
2141  UBool isPrefix,
2142  const UnicodeString* affixPat,
2143  UBool complexCurrencyParsing,
2144  int8_t type,
2145  UChar* currency) const;
2146 
2147  static UnicodeString& trimMarksFromAffix(const UnicodeString& affix, UnicodeString& trimmedAffix);
2148 
2149  UBool equalWithSignCompatibility(UChar32 lhs, UChar32 rhs) const;
2150 
2151  int32_t compareSimpleAffix(const UnicodeString& affix,
2152  const UnicodeString& input,
2153  int32_t pos,
2154  UBool lenient) const;
2155 
2156  static int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos);
2157 
2158  static int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos);
2159 
2160  static int32_t skipUWhiteSpaceAndMarks(const UnicodeString& text, int32_t pos);
2161 
2162  static int32_t skipBidiMarks(const UnicodeString& text, int32_t pos);
2163 
2164  int32_t compareComplexAffix(const UnicodeString& affixPat,
2165  const UnicodeString& input,
2166  int32_t pos,
2167  int8_t type,
2168  UChar* currency) const;
2169 
2170  static int32_t match(const UnicodeString& text, int32_t pos, UChar32 ch);
2171 
2172  static int32_t match(const UnicodeString& text, int32_t pos, const UnicodeString& str);
2173 
2174  static UBool matchSymbol(const UnicodeString &text, int32_t position, int32_t length, const UnicodeString &symbol,
2175  UnicodeSet *sset, UChar32 schar);
2176 
2177  static UBool matchDecimal(UChar32 symbolChar,
2178  UBool sawDecimal, UChar32 sawDecimalChar,
2179  const UnicodeSet *sset, UChar32 schar);
2180 
2181  static UBool matchGrouping(UChar32 groupingChar,
2182  UBool sawGrouping, UChar32 sawGroupingChar,
2183  const UnicodeSet *sset,
2184  UChar32 decimalChar, const UnicodeSet *decimalSet,
2185  UChar32 schar);
2186 
2187  // set up currency affix patterns for mix parsing.
2188  // The patterns saved here are the affix patterns of default currency
2189  // pattern and the unique affix patterns of the plural currency patterns.
2190  // Those patterns are used by parseForCurrency().
2191  void setupCurrencyAffixPatterns(UErrorCode& status);
2192 
2193  // get the currency rounding with respect to currency usage
2194  double getCurrencyRounding(const UChar* currency,
2195  UErrorCode* ec) const;
2196 
2197  // get the currency fraction with respect to currency usage
2198  int getCurrencyFractionDigits(const UChar* currency,
2199  UErrorCode* ec) const;
2200 
2201  // hashtable operations
2202  Hashtable* initHashForAffixPattern(UErrorCode& status);
2203 
2204  void deleteHashForAffixPattern();
2205 
2206  void copyHashForAffixPattern(const Hashtable* source,
2207  Hashtable* target, UErrorCode& status);
2208 
2209  DecimalFormatImpl *fImpl;
2210 
2219  fBoolFlags;
2220 
2221 
2222  // style is only valid when decimal formatter is constructed by
2223  // DecimalFormat(pattern, decimalFormatSymbol, style)
2224  int fStyle;
2225 
2226 
2227  // Affix pattern set for currency.
2228  // It is a set of AffixPatternsForCurrency,
2229  // each element of the set saves the negative prefix pattern,
2230  // negative suffix pattern, positive prefix pattern,
2231  // and positive suffix pattern of a pattern.
2232  // It is used for currency mixed style parsing.
2233  // It is actually is a set.
2234  // The set contains the default currency pattern from the locale,
2235  // and the currency plural patterns.
2236  // Since it is a set, it does not contain duplicated items.
2237  // For example, if 2 currency plural patterns are the same, only one pattern
2238  // is included in the set. When parsing, we do not check whether the plural
2239  // count match or not.
2240  Hashtable* fAffixPatternsForCurrency;
2241 
2242  // Information needed for DecimalFormat to format/parse currency plural.
2243  CurrencyPluralInfo* fCurrencyPluralInfo;
2244 
2245 #if UCONFIG_HAVE_PARSEALLINPUT
2246  UNumberFormatAttributeValue fParseAllInput;
2247 #endif
2248 
2249  // Decimal Format Static Sets singleton.
2250  const DecimalFormatStaticSets *fStaticSets;
2251 
2252 protected:
2253 
2254 #ifndef U_HIDE_INTERNAL_API
2255 
2259  DigitList& _round(const DigitList& number, DigitList& adjustedNum, UBool& isNegative, UErrorCode& status) const;
2260 #endif /* U_HIDE_INTERNAL_API */
2261 
2270  virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
2271 
2275  static const int32_t kDoubleIntegerDigits;
2279  static const int32_t kDoubleFractionDigits;
2280 
2291  static const int32_t kMaxScientificIntegerDigits;
2292 
2293 };
2294 
2296 
2297 #endif /* #if !UCONFIG_NO_FORMATTING */
2298 
2299 #endif // _DECIMFMT
2300 //eof
Base class for all formats.
Definition: format.h:94
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:84
DecimalFormat is a concrete subclass of NumberFormat that formats decimal numbers.
Definition: decimfmt.h:667
enum bitset for boolean fields.
Definition: enumset.h:31
Abstract base class for all number formats.
Definition: numfmt.h:167
C++ API: FieldPosition Iterator.
UDisplayContext
Display context settings.
static const int32_t kMaxScientificIntegerDigits
When someone turns on scientific mode, we assume that more than this number of digits is due to flipp...
Definition: decimfmt.h:2291
virtual void setMinimumIntegerDigits(int32_t newValue)
Sets the minimum number of digits allowed in the integer portion of a number.
void * UClassID
UClassID is used to identify classes without using the compiler&#39;s RTTI.
Definition: uobject.h:91
Limit of boolean attributes.
Definition: unum.h:997
virtual void setMinimumFractionDigits(int32_t newValue)
Sets the minimum number of digits allowed in the fraction portion of a number.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
C++ API: StringPiece: Read-only byte string wrapper class.
C++ API: Currency Amount Object.
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
virtual void getEffectiveCurrency(UChar *result, UErrorCode &ec) const
Returns the currency in effect for this formatter.
UNumberFormatStyle
The possible number format styles.
Definition: unum.h:139
virtual void setCurrency(const UChar *theCurrency, UErrorCode &ec)
Sets the currency used to display currency amounts.
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:53
virtual void setGroupingUsed(UBool newValue)
Set whether or not grouping will be used in this format.
UCurrencyUsage
Currency Usage used for Decimal Format.
Definition: ucurr.h:39
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition: umachine.h:332
virtual void setParseIntegerOnly(UBool value)
Sets whether or not numbers should be parsed as integers only.
virtual CurrencyAmount * parseCurrency(const UnicodeString &text, ParsePosition &pos) const
Parses text from the given string as a currency amount.
EPadPosition
Pad position.
Definition: decimfmt.h:695
A mutable set of Unicode characters and multicharacter strings.
Definition: uniset.h:276
One below the first bitfield-boolean item.
Definition: unum.h:968
ERoundingMode
Rounding mode.
Definition: decimfmt.h:673
virtual UBool operator==(const Format &other) const
Return true if the given Format objects are semantically equal.
virtual void setMaximumIntegerDigits(int32_t newValue)
Sets the maximum number of digits allowed in the integer portion of a number.
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition: umachine.h:312
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
Round away from zero.
Definition: decimfmt.h:677
virtual void setContext(UDisplayContext value, UErrorCode &status)
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
static UClassID getStaticClassID(void)
Return the class ID for this class.
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
Round towards negative infinity.
Definition: decimfmt.h:675
virtual void parse(const UnicodeString &text, Formattable &result, ParsePosition &parsePosition) const =0
Return a long if possible (e.g.
C++ API: Symbols for formatting numbers.
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
C++ API: Locale ID object.
Round towards zero.
Definition: decimfmt.h:676
This class represents the information needed by DecimalFormat to format currency plural, such as "3.00 US dollars" or "1.00 US dollar".
Definition: currpinf.h:44
A UParseError struct is used to returned detailed information about parsing errors.
Definition: parseerr.h:56
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:293
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
C++: internal template EnumSet<>
C++ API: Abstract base class for all number formats.
UNumberFormatAttribute
The possible UNumberFormat numeric attributes.
Definition: unum.h:882
A string-like object that points to a sized piece of memory.
Definition: stringpiece.h:52
Round towards positive infinity.
Definition: decimfmt.h:674
virtual void setMaximumFractionDigits(int32_t newValue)
Sets the maximum number of digits allowed in the fraction portion of a number.
NumberFormat & operator=(const NumberFormat &)
Assignment operator.
static const int32_t kDoubleIntegerDigits
number of integer digits
Definition: decimfmt.h:2275
A currency together with a numeric amount, such as 200 USD.
Definition: curramt.h:35
static const int32_t kDoubleFractionDigits
number of fraction digits
Definition: decimfmt.h:2279
virtual Format * clone() const =0
Clone this object polymorphically.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234