00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef DECIMFMT_H
00025
#define DECIMFMT_H
00026
00027
#include "unicode/utypes.h"
00028
#include "unicode/numfmt.h"
00029
#include "unicode/locid.h"
00030
00031 U_NAMESPACE_BEGIN
00032
00033
class DecimalFormatSymbols;
00034
class DigitList;
00035
00180 class U_I18N_API DecimalFormat:
public NumberFormat {
00181
public:
00182
enum ERoundingMode {
00183 kRoundCeiling,
00184 kRoundFloor,
00185 kRoundDown,
00186 kRoundUp,
00187 kRoundHalfEven,
00188 kRoundHalfDown,
00189 kRoundHalfUp
00190
00191 };
00192
00193
enum EPadPosition {
00194 kPadBeforePrefix,
00195 kPadAfterPrefix,
00196 kPadBeforeSuffix,
00197 kPadAfterSuffix
00198 };
00199
00213 DecimalFormat(UErrorCode& status);
00214
00229 DecimalFormat(
const UnicodeString& pattern,
00230 UErrorCode& status);
00231
00250 DecimalFormat(
const UnicodeString& pattern,
00251
DecimalFormatSymbols* symbolsToAdopt,
00252 UErrorCode& status);
00253
00273 DecimalFormat(
const UnicodeString& pattern,
00274
DecimalFormatSymbols* symbolsToAdopt,
00275
UParseError& parseError,
00276 UErrorCode& status);
00294 DecimalFormat(
const UnicodeString& pattern,
00295
const DecimalFormatSymbols& symbols,
00296 UErrorCode& status);
00297
00302 DecimalFormat(
const DecimalFormat& source);
00303
00308 DecimalFormat& operator=(
const DecimalFormat& rhs);
00309
00314
virtual ~DecimalFormat();
00315
00321
virtual Format*
clone(
void)
const;
00322
00328
virtual UBool operator==(
const Format& other)
const;
00329
00341
virtual UnicodeString& format(
double number,
00342
UnicodeString& toAppendTo,
00343
FieldPosition& pos)
const;
00355
virtual UnicodeString& format(int32_t number,
00356
UnicodeString& toAppendTo,
00357
FieldPosition& pos)
const;
00370
virtual UnicodeString& format(
const Formattable& obj,
00371
UnicodeString& toAppendTo,
00372
FieldPosition& pos,
00373 UErrorCode& status)
const;
00374
00379
UnicodeString& format(
const Formattable& obj,
00380
UnicodeString& result,
00381 UErrorCode& status)
const;
00382
00387
UnicodeString& format(
double number,
00388
UnicodeString& output)
const;
00389
00394
UnicodeString& format(int32_t number,
00395
UnicodeString& output)
const;
00396
00416
virtual void parse(
const UnicodeString& text,
00417
Formattable& result,
00418
ParsePosition& parsePosition)
const;
00419
00420
00422
virtual void parse(
const UnicodeString& text,
00423
Formattable& result,
00424 UErrorCode& error)
const;
00425
00433
virtual const DecimalFormatSymbols* getDecimalFormatSymbols(
void)
const;
00434
00441
virtual void adoptDecimalFormatSymbols(
DecimalFormatSymbols* symbolsToAdopt);
00442
00449
virtual void setDecimalFormatSymbols(
const DecimalFormatSymbols& symbols);
00450
00451
00458
UnicodeString& getPositivePrefix(
UnicodeString& result)
const;
00459
00466
virtual void setPositivePrefix(
const UnicodeString& newValue);
00467
00474
UnicodeString& getNegativePrefix(
UnicodeString& result)
const;
00475
00482
virtual void setNegativePrefix(
const UnicodeString& newValue);
00483
00490
UnicodeString& getPositiveSuffix(
UnicodeString& result)
const;
00491
00498
virtual void setPositiveSuffix(
const UnicodeString& newValue);
00499
00506
UnicodeString& getNegativeSuffix(
UnicodeString& result)
const;
00507
00514
virtual void setNegativeSuffix(
const UnicodeString& newValue);
00515
00525 int32_t getMultiplier(
void)
const;
00526
00536
virtual void setMultiplier(int32_t newValue);
00537
00547
virtual double getRoundingIncrement(
void);
00548
00559
virtual void setRoundingIncrement(
double newValue);
00560
00569
virtual ERoundingMode getRoundingMode(
void);
00570
00580
virtual void setRoundingMode(ERoundingMode roundingMode);
00581
00592
virtual int32_t getFormatWidth(
void);
00593
00607
virtual void setFormatWidth(int32_t width);
00608
00619
inline UChar getPadCharacter(
void);
00620
00634
virtual UnicodeString getPadCharacterString();
00635
00647
inline void setPadCharacter(
UChar padChar);
00648
00663
virtual void setPadCharacter(
UnicodeString padChar);
00664
00683
virtual EPadPosition getPadPosition(
void);
00684
00705
virtual void setPadPosition(EPadPosition padPos);
00706
00717
virtual UBool isScientificNotation(
void);
00718
00730
virtual void setScientificNotation(UBool useScientific);
00731
00742
virtual int8_t getMinimumExponentDigits(
void);
00743
00756
virtual void setMinimumExponentDigits(int8_t minExpDig);
00757
00770
virtual UBool isExponentSignAlwaysShown(
void);
00771
00785
virtual void setExponentSignAlwaysShown(UBool expSignAlways);
00786
00796 int32_t getGroupingSize(
void)
const;
00797
00807
virtual void setGroupingSize(int32_t newValue);
00808
00826 int32_t getSecondaryGroupingSize(
void)
const;
00827
00836
virtual void setSecondaryGroupingSize(int32_t newValue);
00837
00845 UBool isDecimalSeparatorAlwaysShown(
void)
const;
00846
00854
virtual void setDecimalSeparatorAlwaysShown(UBool newValue);
00855
00862
virtual UnicodeString& toPattern(
UnicodeString& result)
const;
00863
00871
virtual UnicodeString& toLocalizedPattern(
UnicodeString& result)
const;
00872
00903
virtual void applyPattern(
const UnicodeString& pattern,
00904
UParseError& parseError,
00905 UErrorCode& status);
00914
virtual void applyPattern(
const UnicodeString& pattern,
00915 UErrorCode& status);
00916
00945
virtual void applyLocalizedPattern(
const UnicodeString& pattern,
00946
UParseError& parseError,
00947 UErrorCode& status);
00948
00949
00950
00951
00952
00953
virtual void applyLocalizedPattern(
const UnicodeString& pattern,
00954 UErrorCode& status);
00955
00956
00963
virtual void setMaximumIntegerDigits(int32_t newValue);
00964
00971
virtual void setMinimumIntegerDigits(int32_t newValue);
00972
00979
virtual void setMaximumFractionDigits(int32_t newValue);
00980
00987
virtual void setMinimumFractionDigits(int32_t newValue);
00988
00994 static const char fgNumberPatterns[];
00995
00996
public:
00997
01009 static UClassID getStaticClassID(
void) {
return (
UClassID)&fgClassID; }
01010
01022 virtual UClassID getDynamicClassID(
void)
const {
return getStaticClassID(); }
01023
01024
private:
01025
static const char fgClassID;
01029
void construct(UErrorCode& status,
01030
UParseError& parseErr,
01031
const UnicodeString* pattern = 0,
01032
DecimalFormatSymbols* symbolsToAdopt = 0,
01033
const Locale& locale = Locale::getDefault()
01034 );
01035
01039
UnicodeString& toPattern(
UnicodeString& result, UBool localized)
const;
01040
01051
void applyPattern(
const UnicodeString& pattern,
01052 UBool localized,
01053
UParseError& parseError,
01054 UErrorCode& status);
01058
UnicodeString& subformat(
UnicodeString& result,
01059
FieldPosition& fieldPosition,
01060 DigitList& digits,
01061 UBool isInteger)
const;
01062
01063
enum {
01064 fgStatusInfinite,
01065 fgStatusLength
01066 } StatusFlags;
01067
01080 UBool subparse(
const UnicodeString& text,
ParsePosition& parsePosition,
01081 DigitList& digits, UBool* status)
const;
01082
01088
void appendAffix(
UnicodeString& buffer,
const UnicodeString& affix,
01089 UBool localized)
const;
01090
01091
void appendAffix(
UnicodeString& buffer,
01092
const UnicodeString* affixPattern,
01093
const UnicodeString& expAffix, UBool localized)
const;
01094
01095
void expandAffix(
const UnicodeString& pattern,
01096
UnicodeString& affix)
const;
01097
01098
void expandAffixes(
void);
01099
01100
static double round(
double a, ERoundingMode mode, UBool isNegative);
01101
01102
void addPadding(
UnicodeString& result,
01103
FieldPosition& fieldPosition,
01104 UBool hasAffixes,
01105 UBool isNegative)
const;
01106
01107 UBool isGroupingPosition(int32_t pos)
const;
01108
01112
01113
01114
01115
01116
UnicodeString fPositivePrefix;
01117
UnicodeString fPositiveSuffix;
01118
UnicodeString fNegativePrefix;
01119
UnicodeString fNegativeSuffix;
01120
UnicodeString* fPosPrefixPattern;
01121
UnicodeString* fPosSuffixPattern;
01122
UnicodeString* fNegPrefixPattern;
01123
UnicodeString* fNegSuffixPattern;
01124 int32_t fMultiplier;
01125 int32_t fGroupingSize;
01126 int32_t fGroupingSize2;
01127 UBool fDecimalSeparatorAlwaysShown;
01128 UBool fIsCurrencyFormat;
01129
DecimalFormatSymbols* fSymbols;
01130
01131 UBool fUseExponentialNotation;
01132 int8_t fMinExponentDigits;
01133 UBool fExponentSignAlwaysShown;
01134
01135
01136
01137
01138
01139 DigitList* fRoundingIncrement;
01140
double fRoundingDouble;
01141 ERoundingMode fRoundingMode;
01142
01143
UnicodeString fPad;
01144 int32_t fFormatWidth;
01145 EPadPosition fPadPosition;
01146
01147
01148
static const UChar kPatternZeroDigit;
01149
static const UChar kPatternGroupingSeparator;
01150
static const UChar kPatternDecimalSeparator;
01151
static const UChar kPatternPerMill;
01152
static const UChar kPatternPercent;
01153
static const UChar kPatternDigit;
01154
static const UChar kPatternSeparator;
01155
static const UChar kPatternExponent;
01156
static const UChar kPatternPlus;
01157
static const UChar kPatternMinus;
01158
static const UChar kPatternPadEscape;
01159
01167
static const UChar kCurrencySign;
01168
static const UChar kQuote;
01169
01170
protected:
01171
static const int32_t kDoubleIntegerDigits;
01172
static const int32_t kDoubleFractionDigits;
01173 };
01174
01175
inline UnicodeString&
01176 DecimalFormat::format(
const Formattable& obj,
01177
UnicodeString& result,
01178 UErrorCode& status)
const {
01179
01180
01181
return NumberFormat::format(obj, result, status);
01182 }
01183
01184
inline UnicodeString&
01185 DecimalFormat::format(
double number,
01186
UnicodeString& output)
const {
01187
FieldPosition pos(0);
01188
return format(number, output, pos);
01189 }
01190
01191
inline UnicodeString&
01192 DecimalFormat::format(int32_t number,
01193
UnicodeString& output)
const {
01194
FieldPosition pos(0);
01195
return format(number, output, pos);
01196 }
01197
01198
inline UChar
01199 DecimalFormat::getPadCharacter() {
01200
return getPadCharacterString().
charAt(0);
01201 }
01202
01203
inline void
01204 DecimalFormat::setPadCharacter(UChar padChar) {
01205 setPadCharacter(
UnicodeString(padChar));
01206 }
01207
01208 U_NAMESPACE_END
01209
01210
#endif // _DECIMFMT
01211