ICU 57.1  57.1
numfmt.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2016, International Business Machines Corporation and others.
4 * All Rights Reserved.
5 ********************************************************************************
6 *
7 * File NUMFMT.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 02/19/97 aliu Converted from java.
13 * 03/18/97 clhuang Updated per C++ implementation.
14 * 04/17/97 aliu Changed DigitCount to int per code review.
15 * 07/20/98 stephen JDK 1.2 sync up. Added scientific support.
16 * Changed naming conventions to match C++ guidelines
17 * Derecated Java style constants (eg, INTEGER_FIELD)
18 ********************************************************************************
19 */
20 
21 #ifndef NUMFMT_H
22 #define NUMFMT_H
23 
24 
25 #include "unicode/utypes.h"
26 
32 #if !UCONFIG_NO_FORMATTING
33 
34 #include "unicode/unistr.h"
35 #include "unicode/format.h"
36 #include "unicode/unum.h" // UNumberFormatStyle
37 #include "unicode/locid.h"
38 #include "unicode/stringpiece.h"
39 #include "unicode/curramt.h"
41 
42 class NumberFormatTest;
43 
45 
46 class SharedNumberFormat;
47 
48 #if !UCONFIG_NO_SERVICE
50 class StringEnumeration;
51 #endif
52 
168 public:
186  kIntegerField = UNUM_INTEGER_FIELD,
188  kFractionField = UNUM_FRACTION_FIELD,
190  kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD,
192  kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD,
194  kExponentSignField = UNUM_EXPONENT_SIGN_FIELD,
196  kExponentField = UNUM_EXPONENT_FIELD,
198  kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD,
200  kCurrencyField = UNUM_CURRENCY_FIELD,
202  kPercentField = UNUM_PERCENT_FIELD,
204  kPermillField = UNUM_PERMILL_FIELD,
206  kSignField = UNUM_SIGN_FIELD,
207 
213  INTEGER_FIELD = UNUM_INTEGER_FIELD,
215  FRACTION_FIELD = UNUM_FRACTION_FIELD
216  };
217 
222  virtual ~NumberFormat();
223 
230  virtual UBool operator==(const Format& other) const;
231 
232 
233  using Format::format;
234 
250  virtual UnicodeString& format(const Formattable& obj,
251  UnicodeString& appendTo,
252  FieldPosition& pos,
253  UErrorCode& status) const;
254 
271  virtual UnicodeString& format(const Formattable& obj,
272  UnicodeString& appendTo,
273  FieldPositionIterator* posIter,
274  UErrorCode& status) const;
275 
304  virtual void parseObject(const UnicodeString& source,
305  Formattable& result,
306  ParsePosition& parse_pos) const;
307 
318  UnicodeString& format( double number,
319  UnicodeString& appendTo) const;
320 
331  UnicodeString& format( int32_t number,
332  UnicodeString& appendTo) const;
333 
344  UnicodeString& format( int64_t number,
345  UnicodeString& appendTo) const;
346 
359  virtual UnicodeString& format(double number,
360  UnicodeString& appendTo,
361  FieldPosition& pos) const = 0;
376  virtual UnicodeString& format(double number,
377  UnicodeString& appendTo,
378  FieldPosition& pos,
379  UErrorCode &status) const;
394  virtual UnicodeString& format(double number,
395  UnicodeString& appendTo,
396  FieldPositionIterator* posIter,
397  UErrorCode& status) const;
410  virtual UnicodeString& format(int32_t number,
411  UnicodeString& appendTo,
412  FieldPosition& pos) const = 0;
413 
427  virtual UnicodeString& format(int32_t number,
428  UnicodeString& appendTo,
429  FieldPosition& pos,
430  UErrorCode &status) const;
431 
446  virtual UnicodeString& format(int32_t number,
447  UnicodeString& appendTo,
448  FieldPositionIterator* posIter,
449  UErrorCode& status) const;
463  virtual UnicodeString& format(int64_t number,
464  UnicodeString& appendTo,
465  FieldPosition& pos) const;
466 
481  virtual UnicodeString& format(int64_t number,
482  UnicodeString& appendTo,
483  FieldPosition& pos,
484  UErrorCode& status) const;
499  virtual UnicodeString& format(int64_t number,
500  UnicodeString& appendTo,
501  FieldPositionIterator* posIter,
502  UErrorCode& status) const;
503 
520  virtual UnicodeString& format(const StringPiece &number,
521  UnicodeString& appendTo,
522  FieldPositionIterator* posIter,
523  UErrorCode& status) const;
524 public:
542  virtual UnicodeString& format(const DigitList &number,
543  UnicodeString& appendTo,
544  FieldPositionIterator* posIter,
545  UErrorCode& status) const;
546 
564  virtual UnicodeString& format(const DigitList &number,
565  UnicodeString& appendTo,
566  FieldPosition& pos,
567  UErrorCode& status) const;
568 
569 public:
570 
590  virtual void parse(const UnicodeString& text,
591  Formattable& result,
592  ParsePosition& parsePosition) const = 0;
593 
607  virtual void parse(const UnicodeString& text,
608  Formattable& result,
609  UErrorCode& status) const;
610 
631  ParsePosition& pos) const;
632 
644  UBool isParseIntegerOnly(void) const;
645 
653  virtual void setParseIntegerOnly(UBool value);
654 
662  virtual void setLenient(UBool enable);
663 
672  virtual UBool isLenient(void) const;
673 
680 
687  static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
688  UErrorCode&);
689 
698  static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale,
699  UNumberFormatStyle style,
700  UErrorCode& errorCode);
701 
702 #ifndef U_HIDE_INTERNAL_API
703 
710  const Locale& desiredLocale,
711  UNumberFormatStyle style,
712  UErrorCode& errorCode);
713 
721  static const SharedNumberFormat* U_EXPORT2 createSharedInstance(
722  const Locale& inLocale, UNumberFormatStyle style, UErrorCode& status);
723 
724 #endif /* U_HIDE_INTERNAL_API */
725 
731 
737  static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
738  UErrorCode&);
739 
745 
751  static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
752  UErrorCode&);
753 
759 
765  static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
766  UErrorCode&);
767 
773  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
774 
775 #if !UCONFIG_NO_SERVICE
786  static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
787 
800  static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
801 
808  static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
809 #endif /* UCONFIG_NO_SERVICE */
810 
820  UBool isGroupingUsed(void) const;
821 
828  virtual void setGroupingUsed(UBool newValue);
829 
838  int32_t getMaximumIntegerDigits(void) const;
839 
852  virtual void setMaximumIntegerDigits(int32_t newValue);
853 
862  int32_t getMinimumIntegerDigits(void) const;
863 
874  virtual void setMinimumIntegerDigits(int32_t newValue);
875 
884  int32_t getMaximumFractionDigits(void) const;
885 
896  virtual void setMaximumFractionDigits(int32_t newValue);
897 
906  int32_t getMinimumFractionDigits(void) const;
907 
918  virtual void setMinimumFractionDigits(int32_t newValue);
919 
932  virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
933 
941  const UChar* getCurrency() const;
942 
952  virtual void setContext(UDisplayContext value, UErrorCode& status);
953 
965 
966 public:
967 
976  static UClassID U_EXPORT2 getStaticClassID(void);
977 
989  virtual UClassID getDynamicClassID(void) const = 0;
990 
991 protected:
992 
998 
1004 
1010 
1019  virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
1020 
1021 #ifndef U_HIDE_INTERNAL_API
1028  static NumberFormat* makeInstance(const Locale& desiredLocale,
1029  UNumberFormatStyle style,
1030  UBool mustBeDecimalFormat,
1031  UErrorCode& errorCode);
1032 #endif /* U_HIDE_INTERNAL_API */
1033 
1034 private:
1035 
1036  static UBool isStyleSupported(UNumberFormatStyle style);
1037 
1045  static NumberFormat* makeInstance(const Locale& desiredLocale,
1046  UNumberFormatStyle style,
1047  UErrorCode& errorCode);
1048 
1049  UBool fGroupingUsed;
1050  int32_t fMaxIntegerDigits;
1051  int32_t fMinIntegerDigits;
1052  int32_t fMaxFractionDigits;
1053  int32_t fMinFractionDigits;
1054 
1055  protected:
1057  static const int32_t gDefaultMaxIntegerDigits;
1059  static const int32_t gDefaultMinIntegerDigits;
1060 
1061  private:
1062  UBool fParseIntegerOnly;
1063  UBool fLenient; // TRUE => lenient parse is enabled
1064 
1065  // ISO currency code
1066  UChar fCurrency[4];
1067 
1068  UDisplayContext fCapitalizationContext;
1069 
1070  friend class ICUNumberFormatFactory; // access to makeInstance
1071  friend class ICUNumberFormatService;
1072  friend class ::NumberFormatTest; // access to isStyleSupported()
1073 };
1074 
1075 #if !UCONFIG_NO_SERVICE
1085 public:
1086 
1092 
1099  virtual UBool visible(void) const = 0;
1100 
1106  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
1107 
1115  virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
1116 };
1117 
1123 protected:
1129 
1135 
1136 public:
1140  SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
1141 
1146 
1150  virtual UBool visible(void) const;
1151 
1155  virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
1156 };
1157 #endif /* #if !UCONFIG_NO_SERVICE */
1158 
1159 // -------------------------------------
1160 
1161 inline UBool
1163 {
1164  return fParseIntegerOnly;
1165 }
1166 
1167 inline UBool
1169 {
1170  return fLenient;
1171 }
1172 
1174 
1175 #endif /* #if !UCONFIG_NO_FORMATTING */
1176 
1177 #endif // _NUMFMT
1178 //eof
A currency together with a numeric amount, such as 200 USD.
Definition: curramt.h:35
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:53
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
Base class for all formats.
Definition: format.h:94
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185
A NumberFormatFactory is used to register new number formats.
Definition: numfmt.h:1084
virtual ~NumberFormatFactory()
Destructor.
virtual UBool visible(void) const =0
Return true if this factory will be visible.
virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status) const =0
Return the locale names directly supported by this factory.
virtual NumberFormat * createFormat(const Locale &loc, UNumberFormatStyle formatType)=0
Return a number format of the appropriate type.
Abstract base class for all number formats.
Definition: numfmt.h:167
static NumberFormat * createPercentInstance(UErrorCode &)
Returns a percentage format for the current default locale.
virtual void parse(const UnicodeString &text, Formattable &result, UErrorCode &status) const
Parse a string as a numeric value, and return a Formattable numeric object.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a double number.
static NumberFormat * createCurrencyInstance(UErrorCode &)
Returns a currency format for the current default locale.
virtual void setCurrency(const UChar *theCurrency, UErrorCode &ec)
Sets the currency used to display currency amounts.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a double number.
static NumberFormat * createInstance(UErrorCode &)
Create a default style NumberFormat for the current default locale.
UnicodeString & format(int32_t number, UnicodeString &appendTo) const
Format a long number.
static NumberFormat * internalCreateInstance(const Locale &desiredLocale, UNumberFormatStyle style, UErrorCode &errorCode)
ICU use only.
static StringEnumeration * getAvailableLocales(void)
Return a StringEnumeration over the locales available at the time of the call, including registered l...
UBool isGroupingUsed(void) const
Returns true if grouping is used in this format.
virtual UnicodeString & format(const DigitList &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a decimal number.
virtual UnicodeString & format(const StringPiece &number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a decimal number.
static NumberFormat * createInstance(const Locale &inLocale, UErrorCode &)
Create a default style NumberFormat for the specified locale.
virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode &status) const
Get the formatter's UDisplayContext value for the specified UDisplayContextType, such as UDISPCTX_TYP...
virtual void setGroupingUsed(UBool newValue)
Set whether or not grouping will be used in this format.
virtual void setMinimumFractionDigits(int32_t newValue)
Sets the minimum number of digits allowed in the fraction portion of a number.
NumberFormat()
Default constructor for subclass use only.
virtual void setMaximumIntegerDigits(int32_t newValue)
Sets the maximum number of digits allowed in the integer portion of a number.
UnicodeString & format(int64_t number, UnicodeString &appendTo) const
Format an int64 number.
virtual UnicodeString & format(const DigitList &number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a decimal number.
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
int32_t getMinimumFractionDigits(void) const
Returns the minimum number of digits allowed in the fraction portion of a number.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPosition &pos) const
Format an int64 number.
UBool isParseIntegerOnly(void) const
Return true if this format will parse numbers as integers only.
Definition: numfmt.h:1162
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPosition &pos) const =0
Format a double number.
static NumberFormat * createInstance(const Locale &desiredLocale, UNumberFormatStyle style, UErrorCode &errorCode)
Create a specific style NumberFormat for the specified locale.
virtual CurrencyAmount * parseCurrency(const UnicodeString &text, ParsePosition &pos) const
Parses text from the given string as a currency amount.
static URegistryKey registerFactory(NumberFormatFactory *toAdopt, UErrorCode &status)
Register a new NumberFormatFactory.
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an int32 number.
NumberFormat & operator=(const NumberFormat &)
Assignment operator.
static NumberFormat * makeInstance(const Locale &desiredLocale, UNumberFormatStyle style, UBool mustBeDecimalFormat, UErrorCode &errorCode)
Creates the specified number format style of the desired locale.
static const Locale * getAvailableLocales(int32_t &count)
Get the set of Locales for which NumberFormats are installed.
virtual void setMinimumIntegerDigits(int32_t newValue)
Sets the minimum number of digits allowed in the integer portion of a number.
static NumberFormat * createScientificInstance(const Locale &inLocale, UErrorCode &)
Returns a scientific format for the specified locale.
int32_t getMaximumFractionDigits(void) const
Returns the maximum number of digits allowed in the fraction portion of a number.
NumberFormat(const NumberFormat &)
Copy constructor.
EAlignmentFields
Alignment Field constants used to construct a FieldPosition object.
Definition: numfmt.h:184
virtual void getEffectiveCurrency(UChar *result, UErrorCode &ec) const
Returns the currency in effect for this formatter.
static const SharedNumberFormat * createSharedInstance(const Locale &inLocale, UNumberFormatStyle style, UErrorCode &status)
ICU use only.
static NumberFormat * createCurrencyInstance(const Locale &inLocale, UErrorCode &)
Returns a currency format for the specified locale.
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const
Parse a string to produce an object.
virtual void parse(const UnicodeString &text, Formattable &result, ParsePosition &parsePosition) const =0
Return a long if possible (e.g.
static UBool unregister(URegistryKey key, UErrorCode &status)
Unregister a previously-registered NumberFormatFactory using the key returned from the register call.
virtual ~NumberFormat()
Destructor.
virtual void setMaximumFractionDigits(int32_t newValue)
Sets the maximum number of digits allowed in the fraction portion of a number.
static NumberFormat * createPercentInstance(const Locale &inLocale, UErrorCode &)
Returns a percentage format for the specified locale.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an int64 number.
const UChar * getCurrency() const
Gets the currency used to display currency amounts.
int32_t getMaximumIntegerDigits(void) const
Returns the maximum number of digits allowed in the integer portion of a number.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an int64 number.
virtual void setParseIntegerOnly(UBool value)
Sets whether or not numbers should be parsed as integers only.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPosition &pos) const =0
Format a long number.
static UClassID getStaticClassID(void)
Return the class ID for this class.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a long number.
static const int32_t gDefaultMaxIntegerDigits
Definition: numfmt.h:1057
UnicodeString & format(double number, UnicodeString &appendTo) const
Format a double number.
virtual void setContext(UDisplayContext value, UErrorCode &status)
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
int32_t getMinimumIntegerDigits(void) const
Returns the minimum number of digits allowed in the integer portion of a number.
static const int32_t gDefaultMinIntegerDigits
Definition: numfmt.h:1059
virtual void setLenient(UBool enable)
Sets whether lenient parsing should be enabled (it is off by default).
virtual UBool isLenient(void) const
Returns whether lenient parsing is enabled (it is off by default).
Definition: numfmt.h:1168
virtual UBool operator==(const Format &other) const
Return true if the given Format objects are semantically equal.
static NumberFormat * createScientificInstance(UErrorCode &)
Returns a scientific format for the current default locale.
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an object to produce a string.
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
A NumberFormatFactory that supports a single locale.
Definition: numfmt.h:1122
virtual UBool visible(void) const
UnicodeString _id
The locale supported by this factory, as a UnicodeString.
Definition: numfmt.h:1134
virtual ~SimpleNumberFormatFactory()
const UBool _visible
True if the locale supported by this factory is visible.
Definition: numfmt.h:1128
SimpleNumberFormatFactory(const Locale &locale, UBool visible=TRUE)
virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status) const
Base class for 'pure' C++ implementations of uenum api.
Definition: strenum.h:55
A string-like object that points to a sized piece of memory.
Definition: stringpiece.h:52
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:221
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:294
C++ API: Currency Amount Object.
C++ API: Base class for all formats.
C++ API: Locale ID object.
C++ API: StringPiece: Read-only byte string wrapper class.
C API: Display context types (enum values)
UDisplayContextType
Display context types, for getting values of a particular setting.
UDisplayContext
Display context settings.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234
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 TRUE
The TRUE value of a UBool.
Definition: umachine.h:238
const void * URegistryKey
Opaque type returned by registerInstance, registerFactory and unregister for service registration.
Definition: umisc.h:55
C++ API: Unicode String.
C API: NumberFormat.
UNumberFormatStyle
The possible number format styles.
Definition: unum.h:139
@ UNUM_INTEGER_FIELD
Definition: unum.h:339
@ UNUM_PERCENT_FIELD
Definition: unum.h:355
@ UNUM_PERMILL_FIELD
Definition: unum.h:357
@ UNUM_EXPONENT_SYMBOL_FIELD
Definition: unum.h:345
@ UNUM_GROUPING_SEPARATOR_FIELD
Definition: unum.h:351
@ UNUM_DECIMAL_SEPARATOR_FIELD
Definition: unum.h:343
@ UNUM_SIGN_FIELD
Definition: unum.h:359
@ UNUM_CURRENCY_FIELD
Definition: unum.h:353
@ UNUM_FRACTION_FIELD
Definition: unum.h:341
@ UNUM_EXPONENT_SIGN_FIELD
Definition: unum.h:347
@ UNUM_EXPONENT_FIELD
Definition: unum.h:349
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition: utypes.h:476
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:358
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129