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
42class NumberFormatTest;
43
45
46class SharedNumberFormat;
47
48#if !UCONFIG_NO_SERVICE
51#endif
52
168public:
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;
524public:
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
569public:
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
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
966public:
967
976 static UClassID U_EXPORT2 getStaticClassID(void);
977
989 virtual UClassID getDynamicClassID(void) const = 0;
990
991protected:
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
1034private:
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
1085public:
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
1123protected:
1129
1135
1136public:
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
1161inline UBool
1163{
1164 return fParseIntegerOnly;
1165}
1166
1167inline 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 const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status) const =0
Return the locale names directly supported by this factory.
virtual UBool visible(void) const =0
Return true if this factory will be visible.
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 * createInstance(const Locale &desiredLocale, UNumberFormatStyle style, UErrorCode &errorCode)
Create a specific style NumberFormat for the specified 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.
static NumberFormat * createCurrencyInstance(const Locale &inLocale, UErrorCode &)
Returns a currency format for the specified locale.
static const SharedNumberFormat * createSharedInstance(const Locale &inLocale, UNumberFormatStyle style, UErrorCode &status)
ICU use only.
virtual void setCurrency(const UChar *theCurrency, UErrorCode &ec)
Sets the currency used to display currency amounts.
static NumberFormat * internalCreateInstance(const Locale &desiredLocale, UNumberFormatStyle style, UErrorCode &errorCode)
ICU use only.
static NumberFormat * createInstance(const Locale &inLocale, UErrorCode &)
Create a default style NumberFormat for the specified locale.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPosition &pos) const =0
Format a double number.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an int64 number.
UBool isGroupingUsed(void) const
Returns true if grouping is used in this format.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPosition &pos) const =0
Format a long number.
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.
static NumberFormat * createPercentInstance(const Locale &inLocale, UErrorCode &)
Returns a percentage format for the specified locale.
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an object to produce a string.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a double number.
UnicodeString & format(int32_t number, UnicodeString &appendTo) const
Format a long number.
virtual void setMaximumIntegerDigits(int32_t newValue)
Sets the maximum number of digits allowed in the integer portion of a number.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a double number.
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
static NumberFormat * createScientificInstance(const Locale &inLocale, UErrorCode &)
Returns a scientific format for the specified locale.
int32_t getMinimumFractionDigits(void) const
Returns the minimum number of digits allowed in the fraction portion of a number.
virtual CurrencyAmount * parseCurrency(const UnicodeString &text, ParsePosition &pos) const
Parses text from the given string as a currency amount.
UBool isParseIntegerOnly(void) const
Return true if this format will parse numbers as integers only.
Definition: numfmt.h:1162
UnicodeString & format(int64_t number, UnicodeString &appendTo) const
Format an int64 number.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a long number.
static URegistryKey registerFactory(NumberFormatFactory *toAdopt, UErrorCode &status)
Register a new NumberFormatFactory.
static NumberFormat * makeInstance(const Locale &desiredLocale, UNumberFormatStyle style, UBool mustBeDecimalFormat, UErrorCode &errorCode)
Creates the specified number format style of the desired locale.
virtual void setMinimumIntegerDigits(int32_t newValue)
Sets the minimum number of digits allowed in the integer portion of a number.
NumberFormat & operator=(const NumberFormat &)
Assignment operator.
static StringEnumeration * getAvailableLocales(void)
Return a StringEnumeration over the locales available at the time of the call, including registered l...
static const Locale * getAvailableLocales(int32_t &count)
Get the set of Locales for which NumberFormats are installed.
virtual UnicodeString & format(const StringPiece &number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a decimal number.
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.
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.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPosition &pos) const
Format an int64 number.
static UBool unregister(URegistryKey key, UErrorCode &status)
Unregister a previously-registered NumberFormatFactory using the key returned from the register call.
virtual ~NumberFormat()
Destructor.
static NumberFormat * createInstance(UErrorCode &)
Create a default style NumberFormat for the current default locale.
virtual void setMaximumFractionDigits(int32_t newValue)
Sets the maximum number of digits allowed in the fraction portion of a number.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an int64 number.
UnicodeString & format(double number, UnicodeString &appendTo) const
Format a double number.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an int32 number.
int32_t getMaximumIntegerDigits(void) const
Returns the maximum number of digits allowed in the integer portion of a number.
virtual void setParseIntegerOnly(UBool value)
Sets whether or not numbers should be parsed as integers only.
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
static NumberFormat * createScientificInstance(UErrorCode &)
Returns a scientific format for the current default locale.
static UClassID getStaticClassID(void)
Return the class ID for this class.
virtual UnicodeString & format(const DigitList &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a decimal number.
static const int32_t gDefaultMaxIntegerDigits
Definition: numfmt.h:1057
const UChar * getCurrency() const
Gets the currency used to display currency amounts.
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 * createPercentInstance(UErrorCode &)
Returns a percentage format for the current default locale.
static NumberFormat * createCurrencyInstance(UErrorCode &)
Returns a currency format for the current default locale.
virtual UnicodeString & format(const DigitList &number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a decimal number.
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