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
00161 virtual UBool operator==(const Format& other) const;
00162
00178 virtual UnicodeString& format(const Formattable& obj,
00179 UnicodeString& toAppendTo,
00180 FieldPosition& pos,
00181 UErrorCode& status) const;
00182
00211 virtual void parseObject(const UnicodeString& source,
00212 Formattable& result,
00213 ParsePosition& parse_pos) const;
00214
00224 UnicodeString& format( double number,
00225 UnicodeString& output) const;
00226
00236 UnicodeString& format( int32_t number,
00237 UnicodeString& output) const;
00238
00251 virtual UnicodeString& format(double number,
00252 UnicodeString& toAppendTo,
00253 FieldPosition& pos) const = 0;
00266 virtual UnicodeString& format(int32_t number,
00267 UnicodeString& toAppendTo,
00268 FieldPosition& pos) const = 0;
00269
00274 UnicodeString& format(const Formattable& obj,
00275 UnicodeString& result,
00276 UErrorCode& status) const;
00277
00299 virtual void parse(const UnicodeString& text,
00300 Formattable& result,
00301 ParsePosition& parsePosition) const = 0;
00302
00317 virtual void parse( const UnicodeString& text,
00318 Formattable& result,
00319 UErrorCode& status) const;
00320
00330 UBool isParseIntegerOnly(void) const;
00331
00337 virtual void setParseIntegerOnly(UBool value);
00338
00347 static NumberFormat* createInstance(UErrorCode&);
00348
00356 static NumberFormat* createInstance(const Locale& inLocale,
00357 UErrorCode&);
00358
00363 static NumberFormat* createCurrencyInstance(UErrorCode&);
00364
00369 static NumberFormat* createCurrencyInstance(const Locale& inLocale,
00370 UErrorCode&);
00371
00376 static NumberFormat* createPercentInstance(UErrorCode&);
00377
00382 static NumberFormat* createPercentInstance(const Locale& inLocale,
00383 UErrorCode&);
00384
00389 static NumberFormat* createScientificInstance(UErrorCode&);
00390
00395 static NumberFormat* createScientificInstance(const Locale& inLocale,
00396 UErrorCode&);
00397
00402 static const Locale* getAvailableLocales(int32_t& count);
00403
00413 UBool isGroupingUsed(void) const;
00414
00420 virtual void setGroupingUsed(UBool newValue);
00421
00428 int32_t getMaximumIntegerDigits(void) const;
00429
00440 virtual void setMaximumIntegerDigits(int32_t newValue);
00441
00448 int32_t getMinimumIntegerDigits(void) const;
00449
00459 virtual void setMinimumIntegerDigits(int32_t newValue);
00460
00467 int32_t getMaximumFractionDigits(void) const;
00468
00478 virtual void setMaximumFractionDigits(int32_t newValue);
00479
00486 int32_t getMinimumFractionDigits(void) const;
00487
00497 virtual void setMinimumFractionDigits(int32_t newValue);
00498
00499 public:
00500
00512 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00513
00526 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00527
00528 protected:
00529
00534 NumberFormat();
00535
00540 NumberFormat(const NumberFormat&);
00541
00546 NumberFormat& operator=(const NumberFormat&);
00547
00548 protected:
00549 static const int32_t fgMaxIntegerDigits;
00550 static const int32_t fgMinIntegerDigits;
00551
00552 private:
00553 static const char fgClassID;
00554
00555 enum EStyles {
00556 kNumberStyle,
00557 kCurrencyStyle,
00558 kPercentStyle,
00559 kScientificStyle,
00560 kStyleCount
00561 };
00562
00563 static NumberFormat* createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00564
00565 static const int32_t fgNumberPatternsCount;
00566 static const UChar* const fgLastResortNumberPatterns[];
00567
00568 UBool fGroupingUsed;
00569 int32_t fMaxIntegerDigits;
00570 int32_t fMinIntegerDigits;
00571 int32_t fMaxFractionDigits;
00572 int32_t fMinFractionDigits;
00573 UBool fParseIntegerOnly;
00574 };
00575
00576
00577
00578 inline UBool
00579 NumberFormat::isParseIntegerOnly() const
00580 {
00581 return fParseIntegerOnly;
00582 }
00583
00584 inline UnicodeString&
00585 NumberFormat::format(const Formattable& obj,
00586 UnicodeString& result,
00587 UErrorCode& status) const {
00588 return Format::format(obj, result, status);
00589 }
00590
00591 U_NAMESPACE_END
00592
00593 #endif // _NUMFMT
00594