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 class Locale;
00028
00123 class U_I18N_API NumberFormat : public Format {
00124 public:
00125
00134 enum EAlignmentFields {
00135 kIntegerField,
00136 kFractionField,
00137
00138
00144 INTEGER_FIELD = kIntegerField,
00145 FRACTION_FIELD = kFractionField
00146 };
00147
00148 virtual ~NumberFormat();
00149
00155 virtual UBool operator==(const Format& other) const;
00156
00172 virtual UnicodeString& format(const Formattable& obj,
00173 UnicodeString& toAppendTo,
00174 FieldPosition& pos,
00175 UErrorCode& status) const;
00176
00205 virtual void parseObject(const UnicodeString& source,
00206 Formattable& result,
00207 ParsePosition& parse_pos) const;
00208
00218 UnicodeString& format( double number,
00219 UnicodeString& output) const;
00220
00221 UnicodeString& format( int32_t number,
00222 UnicodeString& output) const;
00223
00236 virtual UnicodeString& format(double number,
00237 UnicodeString& toAppendTo,
00238 FieldPosition& pos) const = 0;
00239 virtual UnicodeString& format(int32_t number,
00240 UnicodeString& toAppendTo,
00241 FieldPosition& pos) const = 0;
00242
00247 UnicodeString& format(const Formattable& obj,
00248 UnicodeString& result,
00249 UErrorCode& status) const;
00250
00272 virtual void parse(const UnicodeString& text,
00273 Formattable& result,
00274 ParsePosition& parsePosition) const = 0;
00275
00290 virtual void parse( const UnicodeString& text,
00291 Formattable& result,
00292 UErrorCode& status) const;
00293
00303 UBool isParseIntegerOnly(void) const;
00304
00310 virtual void setParseIntegerOnly(UBool value);
00311
00320 static NumberFormat* createInstance(UErrorCode&);
00321
00329 static NumberFormat* createInstance(const Locale& inLocale,
00330 UErrorCode&);
00331
00336 static NumberFormat* createCurrencyInstance(UErrorCode&);
00337
00342 static NumberFormat* createCurrencyInstance(const Locale& inLocale,
00343 UErrorCode&);
00344
00349 static NumberFormat* createPercentInstance(UErrorCode&);
00350
00355 static NumberFormat* createPercentInstance(const Locale& inLocale,
00356 UErrorCode&);
00357
00362 static NumberFormat* createScientificInstance(UErrorCode&);
00363
00368 static NumberFormat* createScientificInstance(const Locale& inLocale,
00369 UErrorCode&);
00370
00375 static const Locale* getAvailableLocales(int32_t& count);
00376
00386 UBool isGroupingUsed(void) const;
00387
00393 virtual void setGroupingUsed(UBool newValue);
00394
00401 int32_t getMaximumIntegerDigits(void) const;
00402
00413 virtual void setMaximumIntegerDigits(int32_t newValue);
00414
00421 int32_t getMinimumIntegerDigits(void) const;
00422
00432 virtual void setMinimumIntegerDigits(int32_t newValue);
00433
00440 int32_t getMaximumFractionDigits(void) const;
00441
00451 virtual void setMaximumFractionDigits(int32_t newValue);
00452
00459 int32_t getMinimumFractionDigits(void) const;
00460
00470 virtual void setMinimumFractionDigits(int32_t newValue);
00471
00472 public:
00473
00485 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00486
00499 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00500
00501 protected:
00502
00507 NumberFormat();
00508
00513 NumberFormat(const NumberFormat&);
00514
00519 NumberFormat& operator=(const NumberFormat&);
00520
00521 protected:
00522 static const int32_t fgMaxIntegerDigits;
00523 static const int32_t fgMinIntegerDigits;
00524
00525 private:
00526 static char fgClassID;
00527
00528 enum EStyles {
00529 kNumberStyle,
00530 kCurrencyStyle,
00531 kPercentStyle,
00532 kScientificStyle,
00533 kStyleCount
00534 };
00535
00536 static NumberFormat* createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00537
00538 static const int32_t fgNumberPatternsCount;
00539 static const UnicodeString fgLastResortNumberPatterns[];
00540
00541 UBool fGroupingUsed;
00542 int32_t fMaxIntegerDigits;
00543 int32_t fMinIntegerDigits;
00544 int32_t fMaxFractionDigits;
00545 int32_t fMinFractionDigits;
00546 UBool fParseIntegerOnly;
00547 };
00548
00549
00550
00551 inline UBool
00552 NumberFormat::isParseIntegerOnly() const
00553 {
00554 return fParseIntegerOnly;
00555 }
00556
00557 inline UnicodeString&
00558 NumberFormat::format(const Formattable& obj,
00559 UnicodeString& result,
00560 UErrorCode& status) const {
00561 return Format::format(obj, result, status);
00562 }
00563
00564 #endif // _NUMFMT
00565