34 #if !UCONFIG_NO_FORMATTING
44 #ifndef U_HIDE_INTERNAL_API
49 #if UCONFIG_FORMAT_FASTPATHS_49
50 #define UNUM_DECIMALFORMAT_INTERNAL_SIZE 16
58 class CurrencyPluralInfo;
61 class FieldPositionHandler;
64 #if defined (_MSC_VER)
752 #ifndef U_HIDE_INTERNAL_API
770 #if UCONFIG_HAVE_PARSEALLINPUT
774 void setParseAllInput(UNumberFormatAttributeValue value);
894 using NumberFormat::format;
1306 virtual void setPositivePrefix(
const UnicodeString& newValue);
1325 virtual void setNegativePrefix(
const UnicodeString& newValue);
1344 virtual void setPositiveSuffix(
const UnicodeString& newValue);
1363 virtual void setNegativeSuffix(
const UnicodeString& newValue);
1375 int32_t getMultiplier(
void)
const;
1387 virtual void setMultiplier(int32_t newValue);
1398 virtual double getRoundingIncrement(
void)
const;
1410 virtual void setRoundingIncrement(
double newValue);
1420 virtual ERoundingMode getRoundingMode(
void)
const;
1430 virtual void setRoundingMode(ERoundingMode roundingMode);
1443 virtual int32_t getFormatWidth(
void)
const;
1459 virtual void setFormatWidth(int32_t width);
1506 virtual EPadPosition getPadPosition(
void)
const;
1524 virtual void setPadPosition(EPadPosition padPos);
1536 virtual UBool isScientificNotation(
void);
1553 virtual void setScientificNotation(
UBool useScientific);
1565 virtual int8_t getMinimumExponentDigits(
void)
const;
1579 virtual void setMinimumExponentDigits(int8_t minExpDig);
1593 virtual UBool isExponentSignAlwaysShown(
void);
1608 virtual void setExponentSignAlwaysShown(
UBool expSignAlways);
1621 int32_t getGroupingSize(
void)
const;
1634 virtual void setGroupingSize(int32_t newValue);
1654 int32_t getSecondaryGroupingSize(
void)
const;
1667 virtual void setSecondaryGroupingSize(int32_t newValue);
1677 UBool isDecimalSeparatorAlwaysShown(
void)
const;
1687 virtual void setDecimalSeparatorAlwaysShown(
UBool newValue);
1786 virtual void applyLocalizedPattern(
const UnicodeString& pattern,
1799 virtual void applyLocalizedPattern(
const UnicodeString& pattern,
1854 int32_t getMinimumSignificantDigits()
const;
1863 int32_t getMaximumSignificantDigits()
const;
1874 void setMinimumSignificantDigits(int32_t min);
1886 void setMaximumSignificantDigits(int32_t max);
1894 UBool areSignificantDigitsUsed()
const;
1903 void setSignificantDigitsUsed(
UBool useSignificantDigits);
1932 static const char fgNumberPatterns[];
1966 int32_t precision()
const;
2011 void applyPatternInternally(
const UnicodeString& pluralCount,
2020 void applyPatternWithoutExpandAffix(
const UnicodeString& pattern,
2029 void expandAffixAdjustWidth(
const UnicodeString* pluralCount);
2043 FieldPositionHandler& handler,
2052 UChar* currency)
const;
2064 UBool currencyParsing,
2067 DigitList& digits,
UBool* status,
2068 UChar* currency)
const;
2079 UChar* currency)
const;
2081 int32_t skipPadding(
const UnicodeString& text, int32_t position)
const;
2088 UBool currencyParsing,
2090 UChar* currency)
const;
2092 static int32_t compareSimpleAffix(
const UnicodeString& affix,
2097 static int32_t skipPatternWhiteSpace(
const UnicodeString& text, int32_t pos);
2099 static int32_t skipUWhiteSpace(
const UnicodeString& text, int32_t pos);
2105 UChar* currency)
const;
2133 FieldPositionHandler& handler,
2135 UBool isPrefix)
const;
2143 UBool localized)
const;
2152 FieldPositionHandler& handler,
2159 FieldPositionHandler& handler,
2160 int32_t prefixLen, int32_t suffixLen)
const;
2162 UBool isGroupingPosition(int32_t pos)
const;
2164 void setCurrencyForSymbols();
2170 virtual void setCurrencyInternally(
const UChar* theCurrency,
UErrorCode& ec);
2176 void setupCurrencyAffixPatterns(
UErrorCode& status);
2183 UBool setupForCurrentPattern,
2184 UBool setupForPluralPattern,
2188 Hashtable* initHashForAffixPattern(
UErrorCode& status);
2189 Hashtable* initHashForAffix(
UErrorCode& status);
2191 void deleteHashForAffixPattern();
2192 void deleteHashForAffix(Hashtable*& table);
2194 void copyHashForAffixPattern(
const Hashtable* source,
2196 void copyHashForAffix(
const Hashtable* source,
2201 FieldPositionHandler& handler,
2205 FieldPositionHandler& handler,
2209 FieldPositionHandler& handler,
2214 fgCurrencySignCountZero,
2215 fgCurrencySignCountInSymbolFormat,
2216 fgCurrencySignCountInISOFormat,
2217 fgCurrencySignCountInPluralFormat
2218 } CurrencySignCount;
2224 UnicodeString fPositivePrefix;
2225 UnicodeString fPositiveSuffix;
2226 UnicodeString fNegativePrefix;
2227 UnicodeString fNegativeSuffix;
2228 UnicodeString* fPosPrefixPattern;
2229 UnicodeString* fPosSuffixPattern;
2230 UnicodeString* fNegPrefixPattern;
2231 UnicodeString* fNegSuffixPattern;
2238 ChoiceFormat* fCurrencyChoice;
2240 DigitList * fMultiplier;
2242 int32_t fGroupingSize;
2243 int32_t fGroupingSize2;
2244 UBool fDecimalSeparatorAlwaysShown;
2245 DecimalFormatSymbols* fSymbols;
2247 UBool fUseSignificantDigits;
2248 int32_t fMinSignificantDigits;
2249 int32_t fMaxSignificantDigits;
2251 UBool fUseExponentialNotation;
2252 int8_t fMinExponentDigits;
2253 UBool fExponentSignAlwaysShown;
2260 DigitList* fRoundingIncrement;
2261 ERoundingMode fRoundingMode;
2264 int32_t fFormatWidth;
2265 EPadPosition fPadPosition;
2271 UnicodeString fFormatPattern;
2285 int fCurrencySignCount;
2363 Hashtable* fAffixPatternsForCurrency;
2372 Hashtable* fAffixesForCurrency;
2373 Hashtable* fPluralAffixesForCurrency;
2376 CurrencyPluralInfo* fCurrencyPluralInfo;
2378 #if UCONFIG_HAVE_PARSEALLINPUT
2379 UNumberFormatAttributeValue fParseAllInput;
2385 #ifndef U_HIDE_INTERNAL_API
2390 DigitList& _round(
const DigitList& number, DigitList& adjustedNum,
UBool& isNegative,
UErrorCode& status)
const;
2424 #if UCONFIG_FORMAT_FASTPATHS_49
2430 uint8_t fReserved[UNUM_DECIMALFORMAT_INTERNAL_SIZE];
2436 void handleChanged();
2446 return NumberFormat::format(obj, appendTo, status);
2450 DecimalFormat::format(
double number,
2453 return format(number, appendTo, pos);
2457 DecimalFormat::format(int32_t number,
2460 return format((int64_t)number, appendTo, pos);
2465 return fSymbols->getConstSymbol(symbol);