00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef NUMFMT_H
00020 #define NUMFMT_H
00021
00022
00023 #include "unicode/utypes.h"
00024 #include "unicode/unistr.h"
00025 #include "unicode/format.h"
00026
00027 U_NAMESPACE_BEGIN
00028
00029 class Locale;
00030
00125 class U_I18N_API NumberFormat : public Format {
00126 public:
00127
00136 enum EAlignmentFields {
00137 kIntegerField,
00138 kFractionField,
00139
00140
00146 INTEGER_FIELD = kIntegerField,
00147 FRACTION_FIELD = kFractionField
00148 };
00149
00154 virtual ~NumberFormat();
00155
00162 virtual UBool operator==(const Format& other) const;
00163
00179 virtual UnicodeString& format(const Formattable& obj,
00180 UnicodeString& toAppendTo,
00181 FieldPosition& pos,
00182 UErrorCode& status) const;
00183
00212 virtual void parseObject(const UnicodeString& source,
00213 Formattable& result,
00214 ParsePosition& parse_pos) const;
00215
00225 UnicodeString& format( double number,
00226 UnicodeString& output) const;
00227
00237 UnicodeString& format( int32_t number,
00238 UnicodeString& output) const;
00239
00252 virtual UnicodeString& format(double number,
00253 UnicodeString& toAppendTo,
00254 FieldPosition& pos) const = 0;
00267 virtual UnicodeString& format(int32_t number,
00268 UnicodeString& toAppendTo,
00269 FieldPosition& pos) const = 0;
00270
00278 UnicodeString& format(const Formattable& obj,
00279 UnicodeString& result,
00280 UErrorCode& status) const;
00281
00303 virtual void parse(const UnicodeString& text,
00304 Formattable& result,
00305 ParsePosition& parsePosition) const = 0;
00306
00321 virtual void parse( const UnicodeString& text,
00322 Formattable& result,
00323 UErrorCode& status) const;
00324
00336 UBool isParseIntegerOnly(void) const;
00337
00345 virtual void setParseIntegerOnly(UBool value);
00346
00355 static NumberFormat* createInstance(UErrorCode&);
00356
00365 static NumberFormat* createInstance(const Locale& inLocale,
00366 UErrorCode&);
00367
00372 static NumberFormat* createCurrencyInstance(UErrorCode&);
00373
00379 static NumberFormat* createCurrencyInstance(const Locale& inLocale,
00380 UErrorCode&);
00381
00386 static NumberFormat* createPercentInstance(UErrorCode&);
00387
00393 static NumberFormat* createPercentInstance(const Locale& inLocale,
00394 UErrorCode&);
00395
00400 static NumberFormat* createScientificInstance(UErrorCode&);
00401
00407 static NumberFormat* createScientificInstance(const Locale& inLocale,
00408 UErrorCode&);
00409
00415 static const Locale* getAvailableLocales(int32_t& count);
00416
00426 UBool isGroupingUsed(void) const;
00427
00434 virtual void setGroupingUsed(UBool newValue);
00435
00444 int32_t getMaximumIntegerDigits(void) const;
00445
00458 virtual void setMaximumIntegerDigits(int32_t newValue);
00459
00468 int32_t getMinimumIntegerDigits(void) const;
00469
00480 virtual void setMinimumIntegerDigits(int32_t newValue);
00481
00490 int32_t getMaximumFractionDigits(void) const;
00491
00502 virtual void setMaximumFractionDigits(int32_t newValue);
00503
00512 int32_t getMinimumFractionDigits(void) const;
00513
00524 virtual void setMinimumFractionDigits(int32_t newValue);
00525
00526 public:
00527
00539 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00540
00553 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00554
00555 protected:
00556
00561 NumberFormat();
00562
00567 NumberFormat(const NumberFormat&);
00568
00573 NumberFormat& operator=(const NumberFormat&);
00574
00575 protected:
00576 static const int32_t fgMaxIntegerDigits;
00577 static const int32_t fgMinIntegerDigits;
00578
00579 private:
00580 static const char fgClassID;
00581
00582 enum EStyles {
00583 kNumberStyle,
00584 kCurrencyStyle,
00585 kPercentStyle,
00586 kScientificStyle,
00587 kStyleCount
00588 };
00589
00597 static NumberFormat* createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00598
00599 static const int32_t fgNumberPatternsCount;
00600 static const UChar* const fgLastResortNumberPatterns[];
00601
00602 UBool fGroupingUsed;
00603 int32_t fMaxIntegerDigits;
00604 int32_t fMinIntegerDigits;
00605 int32_t fMaxFractionDigits;
00606 int32_t fMinFractionDigits;
00607 UBool fParseIntegerOnly;
00608 };
00609
00610
00611
00612 inline UBool
00613 NumberFormat::isParseIntegerOnly() const
00614 {
00615 return fParseIntegerOnly;
00616 }
00617
00618 inline UnicodeString&
00619 NumberFormat::format(const Formattable& obj,
00620 UnicodeString& result,
00621 UErrorCode& status) const {
00622 return Format::format(obj, result, status);
00623 }
00624
00625 U_NAMESPACE_END
00626
00627 #endif // _NUMFMT
00628