ICU 62.1 62.1
numfmt.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4********************************************************************************
5* Copyright (C) 1997-2016, International Business Machines Corporation and others.
6* All Rights Reserved.
7********************************************************************************
8*
9* File NUMFMT.H
10*
11* Modification History:
12*
13* Date Name Description
14* 02/19/97 aliu Converted from java.
15* 03/18/97 clhuang Updated per C++ implementation.
16* 04/17/97 aliu Changed DigitCount to int per code review.
17* 07/20/98 stephen JDK 1.2 sync up. Added scientific support.
18* Changed naming conventions to match C++ guidelines
19* Derecated Java style constants (eg, INTEGER_FIELD)
20********************************************************************************
21*/
22
23#ifndef NUMFMT_H
24#define NUMFMT_H
25
26
27#include "unicode/utypes.h"
28
34#if !UCONFIG_NO_FORMATTING
35
36#include "unicode/unistr.h"
37#include "unicode/format.h"
38#include "unicode/unum.h" // UNumberFormatStyle
39#include "unicode/locid.h"
40#include "unicode/stringpiece.h"
41#include "unicode/curramt.h"
43
44class NumberFormatTest;
45
47
48class SharedNumberFormat;
49
50#if !UCONFIG_NO_SERVICE
51class NumberFormatFactory;
52class StringEnumeration;
53#endif
54
175public:
190 kRoundHalfEven,
192 kRoundHalfDown,
194 kRoundHalfUp,
200 kRoundUnnecessary
201 };
202
220 kIntegerField = UNUM_INTEGER_FIELD,
222 kFractionField = UNUM_FRACTION_FIELD,
224 kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD,
226 kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD,
228 kExponentSignField = UNUM_EXPONENT_SIGN_FIELD,
230 kExponentField = UNUM_EXPONENT_FIELD,
232 kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD,
234 kCurrencyField = UNUM_CURRENCY_FIELD,
236 kPercentField = UNUM_PERCENT_FIELD,
238 kPermillField = UNUM_PERMILL_FIELD,
240 kSignField = UNUM_SIGN_FIELD,
241
247 INTEGER_FIELD = UNUM_INTEGER_FIELD,
249 FRACTION_FIELD = UNUM_FRACTION_FIELD
250 };
251
256 virtual ~NumberFormat();
257
264 virtual UBool operator==(const Format& other) const;
265
266
267 using Format::format;
268
285 UnicodeString& appendTo,
286 FieldPosition& pos,
287 UErrorCode& status) const;
288
306 UnicodeString& appendTo,
308 UErrorCode& status) const;
309
338 virtual void parseObject(const UnicodeString& source,
340 ParsePosition& parse_pos) const;
341
352 UnicodeString& format( double number,
353 UnicodeString& appendTo) const;
354
365 UnicodeString& format( int32_t number,
366 UnicodeString& appendTo) const;
367
378 UnicodeString& format( int64_t number,
379 UnicodeString& appendTo) const;
380
393 virtual UnicodeString& format(double number,
394 UnicodeString& appendTo,
395 FieldPosition& pos) const = 0;
410 virtual UnicodeString& format(double number,
411 UnicodeString& appendTo,
412 FieldPosition& pos,
413 UErrorCode &status) const;
428 virtual UnicodeString& format(double number,
429 UnicodeString& appendTo,
431 UErrorCode& status) const;
444 virtual UnicodeString& format(int32_t number,
445 UnicodeString& appendTo,
446 FieldPosition& pos) const = 0;
447
461 virtual UnicodeString& format(int32_t number,
462 UnicodeString& appendTo,
463 FieldPosition& pos,
464 UErrorCode &status) const;
465
480 virtual UnicodeString& format(int32_t number,
481 UnicodeString& appendTo,
483 UErrorCode& status) const;
497 virtual UnicodeString& format(int64_t number,
498 UnicodeString& appendTo,
499 FieldPosition& pos) const;
500
515 virtual UnicodeString& format(int64_t number,
516 UnicodeString& appendTo,
517 FieldPosition& pos,
518 UErrorCode& status) const;
533 virtual UnicodeString& format(int64_t number,
534 UnicodeString& appendTo,
536 UErrorCode& status) const;
537
555 UnicodeString& appendTo,
557 UErrorCode& status) const;
558
559// Can't use #ifndef U_HIDE_INTERNAL_API because these are virtual methods
560
578 virtual UnicodeString& format(const number::impl::DecimalQuantity &number,
579 UnicodeString& appendTo,
581 UErrorCode& status) const;
582
600 virtual UnicodeString& format(const number::impl::DecimalQuantity &number,
601 UnicodeString& appendTo,
602 FieldPosition& pos,
603 UErrorCode& status) const;
604
624 virtual void parse(const UnicodeString& text,
626 ParsePosition& parsePosition) const = 0;
627
641 virtual void parse(const UnicodeString& text,
643 UErrorCode& status) const;
644
665 ParsePosition& pos) const;
666
678 UBool isParseIntegerOnly(void) const;
679
687 virtual void setParseIntegerOnly(UBool value);
688
696 virtual void setLenient(UBool enable);
697
706 virtual UBool isLenient(void) const;
707
717
728 UErrorCode&);
729
743 UErrorCode& errorCode);
744
745#ifndef U_HIDE_INTERNAL_API
746
753 const Locale& desiredLocale,
755 UErrorCode& errorCode);
756
766
767#endif /* U_HIDE_INTERNAL_API */
768
777
787 UErrorCode&);
788
797
807 UErrorCode&);
808
817
827 UErrorCode&);
828
834 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
835
836#if !UCONFIG_NO_SERVICE
848
862
870#endif /* UCONFIG_NO_SERVICE */
871
882
890
899 int32_t getMaximumIntegerDigits(void) const;
900
913 virtual void setMaximumIntegerDigits(int32_t newValue);
914
923 int32_t getMinimumIntegerDigits(void) const;
924
935 virtual void setMinimumIntegerDigits(int32_t newValue);
936
945 int32_t getMaximumFractionDigits(void) const;
946
957 virtual void setMaximumFractionDigits(int32_t newValue);
958
967 int32_t getMinimumFractionDigits(void) const;
968
979 virtual void setMinimumFractionDigits(int32_t newValue);
980
993 virtual void setCurrency(const char16_t* theCurrency, UErrorCode& ec);
994
1002 const char16_t* getCurrency() const;
1003
1014
1026
1033 virtual ERoundingMode getRoundingMode(void) const;
1034
1040 virtual void setRoundingMode(ERoundingMode roundingMode);
1041
1042public:
1043
1053
1065 virtual UClassID getDynamicClassID(void) const = 0;
1066
1067protected:
1068
1074
1080
1086
1095 virtual void getEffectiveCurrency(char16_t* result, UErrorCode& ec) const;
1096
1097#ifndef U_HIDE_INTERNAL_API
1107 UErrorCode& errorCode);
1108#endif /* U_HIDE_INTERNAL_API */
1109
1110private:
1111
1112 static UBool isStyleSupported(UNumberFormatStyle style);
1113
1121 static NumberFormat* makeInstance(const Locale& desiredLocale,
1123 UErrorCode& errorCode);
1124
1125 UBool fGroupingUsed;
1126 int32_t fMaxIntegerDigits;
1127 int32_t fMinIntegerDigits;
1128 int32_t fMaxFractionDigits;
1129 int32_t fMinFractionDigits;
1130
1131 protected:
1133 static const int32_t gDefaultMaxIntegerDigits;
1135 static const int32_t gDefaultMinIntegerDigits;
1136
1137 private:
1138 UBool fParseIntegerOnly;
1139 UBool fLenient; // TRUE => lenient parse is enabled
1140
1141 // ISO currency code
1142 char16_t fCurrency[4];
1143
1144 UDisplayContext fCapitalizationContext;
1145
1146 friend class ICUNumberFormatFactory; // access to makeInstance
1147 friend class ICUNumberFormatService;
1148 friend class ::NumberFormatTest; // access to isStyleSupported()
1149};
1150
1151#if !UCONFIG_NO_SERVICE
1161public:
1162
1168
1175 virtual UBool visible(void) const = 0;
1176
1182 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
1183
1192};
1193
1199protected:
1205
1211
1212public:
1216 SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
1217
1222
1226 virtual UBool visible(void) const;
1227
1231 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
1232};
1233#endif /* #if !UCONFIG_NO_SERVICE */
1234
1235// -------------------------------------
1236
1237inline UBool
1238NumberFormat::isParseIntegerOnly() const
1239{
1240 return fParseIntegerOnly;
1241}
1242
1243inline UBool
1244NumberFormat::isLenient() const
1245{
1246 return fLenient;
1247}
1248
1250
1251#endif /* #if !UCONFIG_NO_FORMATTING */
1252
1253#endif // _NUMFMT
1254//eof
A currency together with a numeric amount, such as 200 USD.
Definition curramt.h:37
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition fpositer.h:55
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition fieldpos.h:108
Base class for all formats.
Definition format.h:96
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition fmtable.h:62
"Smart pointer" base class; do not use directly: use LocalPointer etc.
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:188
A NumberFormatFactory is used to register new number formats.
Definition numfmt.h:1160
virtual NumberFormat * createFormat(const Locale &loc, UNumberFormatStyle formatType)=0
Return a number format of the appropriate type.
virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status) const =0
Return the locale names directly supported by this factory.
virtual ~NumberFormatFactory()
Destructor.
virtual UBool visible(void) const =0
Return true if this factory will be visible.
virtual void getEffectiveCurrency(char16_t *result, UErrorCode &ec) const
Returns the currency in effect for this formatter.
virtual void setMinimumIntegerDigits(int32_t newValue)
Sets the minimum number of digits allowed in the integer portion of a number.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a double number.
virtual void setParseIntegerOnly(UBool value)
Sets whether or not numbers should be parsed as integers only.
virtual void setMaximumIntegerDigits(int32_t newValue)
Sets the maximum number of digits allowed in the integer portion of a number.
virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode &status) const
Get the formatter's UDisplayContext value for the specified UDisplayContextType, such as UDISPCTX_TYP...
static const Locale * getAvailableLocales(int32_t &count)
Get the set of Locales for which NumberFormats are installed.
virtual void setContext(UDisplayContext value, UErrorCode &status)
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
UnicodeString & format(int64_t number, UnicodeString &appendTo) const
Format an int64 number.
virtual UBool operator==(const Format &other) const
Return true if the given Format objects are semantically equal.
NumberFormat & operator=(const NumberFormat &)
Assignment operator.
static NumberFormat * createCurrencyInstance(UErrorCode &)
Returns a currency 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.
virtual ERoundingMode getRoundingMode(void) const
Get the rounding mode.
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
static NumberFormat * createPercentInstance(const Locale &inLocale, UErrorCode &)
Returns a percentage format for the specified locale.
static const int32_t gDefaultMaxIntegerDigits
Definition numfmt.h:1133
virtual void setLenient(UBool enable)
Sets whether lenient parsing should be enabled (it is off by default).
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
const char16_t * getCurrency() const
Gets the currency used to display currency amounts.
virtual UnicodeString & format(const number::impl::DecimalQuantity &number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a decimal number.
int32_t getMinimumFractionDigits(void) const
Returns the minimum number of digits allowed in the fraction portion of a number.
static NumberFormat * makeInstance(const Locale &desiredLocale, UNumberFormatStyle style, UBool mustBeDecimalFormat, UErrorCode &errorCode)
Creates the specified number format style of the desired locale.
virtual ~NumberFormat()
Destructor.
static NumberFormat * internalCreateInstance(const Locale &desiredLocale, UNumberFormatStyle style, UErrorCode &errorCode)
ICU use only.
virtual void setMinimumFractionDigits(int32_t newValue)
Sets the minimum number of digits allowed in the fraction portion of a number.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format an int32 number.
UnicodeString & format(double number, UnicodeString &appendTo) const
Format a double number.
NumberFormat()
Default constructor for subclass use only.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPosition &pos) const =0
Format a long number.
static const int32_t gDefaultMinIntegerDigits
Definition numfmt.h:1135
static NumberFormat * createScientificInstance(UErrorCode &)
Returns a scientific format for the current default locale.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an int64 number.
EAlignmentFields
Alignment Field constants used to construct a FieldPosition object.
Definition numfmt.h:218
static NumberFormat * createInstance(UErrorCode &)
Create a default style NumberFormat for the current default locale.
virtual void setGroupingUsed(UBool newValue)
Set whether or not grouping will be used in this format.
static URegistryKey registerFactory(NumberFormatFactory *toAdopt, UErrorCode &status)
Register a new NumberFormatFactory.
virtual void setCurrency(const char16_t *theCurrency, UErrorCode &ec)
Sets the currency used to display currency amounts.
virtual void setMaximumFractionDigits(int32_t newValue)
Sets the maximum number of digits allowed in the fraction portion of a number.
virtual UnicodeString & format(const number::impl::DecimalQuantity &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a decimal number.
virtual UnicodeString & format(StringPiece number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a decimal number.
ERoundingMode
Rounding mode.
Definition numfmt.h:185
@ kRoundDown
Round towards zero.
Definition numfmt.h:188
@ kRoundFloor
Round towards negative infinity.
Definition numfmt.h:187
@ kRoundCeiling
Round towards positive infinity.
Definition numfmt.h:186
@ kRoundUp
Round away from zero.
Definition numfmt.h:189
UnicodeString & format(int32_t number, UnicodeString &appendTo) const
Format a long number.
int32_t getMaximumIntegerDigits(void) const
Returns the maximum number of digits allowed in the integer portion of a number.
static StringEnumeration * getAvailableLocales(void)
Return a StringEnumeration over the locales available at the time of the call, including registered l...
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPosition &pos) const
Format an int64 number.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPosition &pos) const =0
Format a double number.
static NumberFormat * createScientificInstance(const Locale &inLocale, UErrorCode &)
Returns a scientific format for the specified locale.
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const
Parse a string to produce an object.
static NumberFormat * createInstance(const Locale &inLocale, UErrorCode &)
Create a default style NumberFormat for the specified locale.
static NumberFormat * createCurrencyInstance(const Locale &inLocale, UErrorCode &)
Returns a currency format for the specified locale.
virtual void setRoundingMode(ERoundingMode roundingMode)
Set the rounding mode.
int32_t getMaximumFractionDigits(void) const
Returns the maximum number of digits allowed in the fraction portion of a number.
virtual UnicodeString & format(int32_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a long number.
virtual UnicodeString & format(int64_t number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) 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.
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, ParsePosition &parsePosition) const =0
Return a long if possible (e.g.
UBool isGroupingUsed(void) const
Returns true if grouping is used in this format.
static NumberFormat * createPercentInstance(UErrorCode &)
Returns a percentage format for the current default locale.
static const SharedNumberFormat * createSharedInstance(const Locale &inLocale, UNumberFormatStyle style, UErrorCode &status)
ICU use only.
virtual UnicodeString & format(double number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format a double number.
virtual CurrencyAmount * parseCurrency(const UnicodeString &text, ParsePosition &pos) const
Parses text from the given string as a currency amount.
NumberFormat(const NumberFormat &)
Copy constructor.
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 UClassID getStaticClassID(void)
Return the class ID for this class.
int32_t getMinimumIntegerDigits(void) const
Returns the minimum number of digits allowed in the integer portion of a number.
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition parsepos.h:49
A NumberFormatFactory that supports a single locale.
Definition numfmt.h:1198
SimpleNumberFormatFactory(const Locale &locale, UBool visible=TRUE)
virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode &status) const
virtual UBool visible(void) const
UnicodeString _id
The locale supported by this factory, as a UnicodeString.
Definition numfmt.h:1210
const UBool _visible
True if the locale supported by this factory is visible.
Definition numfmt.h:1204
Base class for 'pure' C++ implementations of uenum api.
Definition strenum.h:57
A string-like object that points to a sized piece of memory.
Definition stringpiece.h:54
UObject is the common ICU "boilerplate" class.
Definition uobject.h:223
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:287
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:236
#define TRUE
The TRUE value of a UBool.
Definition umachine.h:240
const void * URegistryKey
Opaque type returned by registerInstance, registerFactory and unregister for service registration.
Definition umisc.h:57
C++ API: Unicode String.
C API: Compatibility APIs for number formatting.
UNumberFormatStyle
The possible number format styles.
Definition unum.h:146
@ UNUM_INTEGER_FIELD
Definition unum.h:357
@ UNUM_PERCENT_FIELD
Definition unum.h:373
@ UNUM_PERMILL_FIELD
Definition unum.h:375
@ UNUM_EXPONENT_SYMBOL_FIELD
Definition unum.h:363
@ UNUM_GROUPING_SEPARATOR_FIELD
Definition unum.h:369
@ UNUM_DECIMAL_SEPARATOR_FIELD
Definition unum.h:361
@ UNUM_SIGN_FIELD
Definition unum.h:377
@ UNUM_CURRENCY_FIELD
Definition unum.h:371
@ UNUM_FRACTION_FIELD
Definition unum.h:359
@ UNUM_EXPONENT_SIGN_FIELD
Definition unum.h:365
@ UNUM_EXPONENT_FIELD
Definition unum.h:367
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:93
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:396
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:360
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:138
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:137