"Fossies" - the Fresh Open Source Software Archive

Member "decimfmt_8h_source.html" (3 Oct 2019, 87038 Bytes) of package /linux/misc/icu4c-65_1-docs.zip:


Caution: In this restricted "Fossies" environment the current HTML page may not be correctly presentated and may have some non-functional links. You can here alternatively try to browse the pure source code or just view or download the uninterpreted raw source code. If the rendering is insufficient you may try to find and view the page on the project site itself.

ICU 65.1  65.1
decimfmt.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ********************************************************************************
5 * Copyright (C) 1997-2016, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 ********************************************************************************
8 *
9 * File DECIMFMT.H
10 *
11 * Modification History:
12 *
13 * Date Name Description
14 * 02/19/97 aliu Converted from java.
15 * 03/20/97 clhuang Updated per C++ implementation.
16 * 04/03/97 aliu Rewrote parsing and formatting completely, and
17 * cleaned up and debugged. Actually works now.
18 * 04/17/97 aliu Changed DigitCount to int per code review.
19 * 07/10/97 helena Made ParsePosition a class and get rid of the function
20 * hiding problems.
21 * 09/09/97 aliu Ported over support for exponential formats.
22 * 07/20/98 stephen Changed documentation
23 * 01/30/13 emmons Added Scaling methods
24 ********************************************************************************
25 */
26 
27 #ifndef DECIMFMT_H
28 #define DECIMFMT_H
29 
30 #include "unicode/utypes.h"
31 
32 #if U_SHOW_CPLUSPLUS_API
33 
39 #if !UCONFIG_NO_FORMATTING
40 
41 #include "unicode/dcfmtsym.h"
42 #include "unicode/numfmt.h"
43 #include "unicode/locid.h"
44 #include "unicode/fpositer.h"
45 #include "unicode/stringpiece.h"
46 #include "unicode/curramt.h"
47 #include "unicode/enumset.h"
48 
49 U_NAMESPACE_BEGIN
50 
51 class CurrencyPluralInfo;
52 class CompactDecimalFormat;
53 
54 namespace number {
55 class LocalizedNumberFormatter;
56 class FormattedNumber;
57 namespace impl {
58 class DecimalQuantity;
59 struct DecimalFormatFields;
60 }
61 }
62 
63 namespace numparse {
64 namespace impl {
65 class NumberParserImpl;
66 }
67 }
68 
669  public:
675  kPadBeforePrefix, kPadAfterPrefix, kPadBeforeSuffix, kPadAfterSuffix
676  };
677 
694  DecimalFormat(UErrorCode& status);
695 
713  DecimalFormat(const UnicodeString& pattern, UErrorCode& status);
714 
736  DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt, UErrorCode& status);
737 
738 #ifndef U_HIDE_INTERNAL_API
739 
752  DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt,
753  UNumberFormatStyle style, UErrorCode& status);
754 
755 #if UCONFIG_HAVE_PARSEALLINPUT
756 
760  void setParseAllInput(UNumberFormatAttributeValue value);
761 
762 #endif
763 
764 #endif /* U_HIDE_INTERNAL_API */
765 
766  private:
767 
772  DecimalFormat(const DecimalFormatSymbols* symbolsToAdopt, UErrorCode& status);
773 
774  public:
775 
786  virtual DecimalFormat& setAttribute(UNumberFormatAttribute attr, int32_t newValue, UErrorCode& status);
787 
797  virtual int32_t getAttribute(UNumberFormatAttribute attr, UErrorCode& status) const;
798 
799 
806  void setGroupingUsed(UBool newValue) U_OVERRIDE;
807 
815  void setParseIntegerOnly(UBool value) U_OVERRIDE;
816 
824  void setLenient(UBool enable) U_OVERRIDE;
825 
848  DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt,
849  UParseError& parseError, UErrorCode& status);
850 
871  DecimalFormat(const UnicodeString& pattern, const DecimalFormatSymbols& symbols, UErrorCode& status);
872 
879  DecimalFormat(const DecimalFormat& source);
880 
887  DecimalFormat& operator=(const DecimalFormat& rhs);
888 
894 
902  DecimalFormat* clone() const U_OVERRIDE;
903 
912  UBool operator==(const Format& other) const U_OVERRIDE;
913 
914 
915  using NumberFormat::format;
916 
928  UnicodeString& format(double number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE;
929 
930 #ifndef U_HIDE_INTERNAL_API
931 
943  UnicodeString& format(double number, UnicodeString& appendTo, FieldPosition& pos,
944  UErrorCode& status) const U_OVERRIDE;
945 #endif /* U_HIDE_INTERNAL_API */
946 
960  UnicodeString& format(double number, UnicodeString& appendTo, FieldPositionIterator* posIter,
961  UErrorCode& status) const U_OVERRIDE;
962 
974  UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE;
975 
976 #ifndef U_HIDE_INTERNAL_API
977 
989  UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPosition& pos,
990  UErrorCode& status) const U_OVERRIDE;
991 #endif /* U_HIDE_INTERNAL_API */
992 
1006  UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPositionIterator* posIter,
1007  UErrorCode& status) const U_OVERRIDE;
1008 
1020  UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE;
1021 
1022 #ifndef U_HIDE_INTERNAL_API
1023 
1035  UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPosition& pos,
1036  UErrorCode& status) const U_OVERRIDE;
1037 #endif /* U_HIDE_INTERNAL_API */
1038 
1052  UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPositionIterator* posIter,
1053  UErrorCode& status) const U_OVERRIDE;
1054 
1071  UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter,
1072  UErrorCode& status) const U_OVERRIDE;
1073 
1074 #ifndef U_HIDE_INTERNAL_API
1075 
1091  UnicodeString& format(const number::impl::DecimalQuantity& number, UnicodeString& appendTo,
1092  FieldPositionIterator* posIter, UErrorCode& status) const U_OVERRIDE;
1093 
1109  UnicodeString& format(const number::impl::DecimalQuantity& number, UnicodeString& appendTo,
1110  FieldPosition& pos, UErrorCode& status) const U_OVERRIDE;
1111 
1112 #endif // U_HIDE_INTERNAL_API
1113 
1114  using NumberFormat::parse;
1115 
1135  void parse(const UnicodeString& text, Formattable& result,
1136  ParsePosition& parsePosition) const U_OVERRIDE;
1137 
1157  CurrencyAmount* parseCurrency(const UnicodeString& text, ParsePosition& pos) const U_OVERRIDE;
1158 
1166  virtual const DecimalFormatSymbols* getDecimalFormatSymbols(void) const;
1167 
1174  virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt);
1175 
1182  virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols);
1183 
1184 
1191  virtual const CurrencyPluralInfo* getCurrencyPluralInfo(void) const;
1192 
1199  virtual void adoptCurrencyPluralInfo(CurrencyPluralInfo* toAdopt);
1200 
1207  virtual void setCurrencyPluralInfo(const CurrencyPluralInfo& info);
1208 
1209 
1218  UnicodeString& getPositivePrefix(UnicodeString& result) const;
1219 
1227  virtual void setPositivePrefix(const UnicodeString& newValue);
1228 
1237  UnicodeString& getNegativePrefix(UnicodeString& result) const;
1238 
1246  virtual void setNegativePrefix(const UnicodeString& newValue);
1247 
1256  UnicodeString& getPositiveSuffix(UnicodeString& result) const;
1257 
1265  virtual void setPositiveSuffix(const UnicodeString& newValue);
1266 
1275  UnicodeString& getNegativeSuffix(UnicodeString& result) const;
1276 
1284  virtual void setNegativeSuffix(const UnicodeString& newValue);
1285 
1286 #ifndef U_HIDE_DRAFT_API
1287 
1295  UBool isSignAlwaysShown() const;
1296 
1305  void setSignAlwaysShown(UBool value);
1306 #endif /* U_HIDE_DRAFT_API */
1307 
1320  int32_t getMultiplier(void) const;
1321 
1335  virtual void setMultiplier(int32_t newValue);
1336 
1349  int32_t getMultiplierScale(void) const;
1350 
1370  void setMultiplierScale(int32_t newValue);
1371 
1381  virtual double getRoundingIncrement(void) const;
1382 
1394  virtual void setRoundingIncrement(double newValue);
1395 
1404  virtual ERoundingMode getRoundingMode(void) const U_OVERRIDE;
1405 
1414  virtual void setRoundingMode(ERoundingMode roundingMode) U_OVERRIDE;
1415 
1427  virtual int32_t getFormatWidth(void) const;
1428 
1443  virtual void setFormatWidth(int32_t width);
1444 
1457  virtual UnicodeString getPadCharacterString() const;
1458 
1473  virtual void setPadCharacter(const UnicodeString& padChar);
1474 
1490  virtual EPadPosition getPadPosition(void) const;
1491 
1508  virtual void setPadPosition(EPadPosition padPos);
1509 
1520  virtual UBool isScientificNotation(void) const;
1521 
1537  virtual void setScientificNotation(UBool useScientific);
1538 
1549  virtual int8_t getMinimumExponentDigits(void) const;
1550 
1563  virtual void setMinimumExponentDigits(int8_t minExpDig);
1564 
1577  virtual UBool isExponentSignAlwaysShown(void) const;
1578 
1592  virtual void setExponentSignAlwaysShown(UBool expSignAlways);
1593 
1605  int32_t getGroupingSize(void) const;
1606 
1618  virtual void setGroupingSize(int32_t newValue);
1619 
1638  int32_t getSecondaryGroupingSize(void) const;
1639 
1651  virtual void setSecondaryGroupingSize(int32_t newValue);
1652 
1653 #ifndef U_HIDE_DRAFT_API
1654 
1677  int32_t getMinimumGroupingDigits() const;
1678 
1689  void setMinimumGroupingDigits(int32_t newValue);
1690 #endif /* U_HIDE_DRAFT_API */
1691 
1692 
1701  UBool isDecimalSeparatorAlwaysShown(void) const;
1702 
1711  virtual void setDecimalSeparatorAlwaysShown(UBool newValue);
1712 
1719  UBool isDecimalPatternMatchRequired(void) const;
1720 
1730  virtual void setDecimalPatternMatchRequired(UBool newValue);
1731 
1732 #ifndef U_HIDE_DRAFT_API
1733 
1740  UBool isParseNoExponent() const;
1741 
1750  void setParseNoExponent(UBool value);
1751 
1759  UBool isParseCaseSensitive() const;
1760 
1772  void setParseCaseSensitive(UBool value);
1773 
1782  UBool isFormatFailIfMoreThanMaxDigits() const;
1783 
1791  void setFormatFailIfMoreThanMaxDigits(UBool value);
1792 #endif /* U_HIDE_DRAFT_API */
1793 
1794 
1805  virtual UnicodeString& toPattern(UnicodeString& result) const;
1806 
1817  virtual UnicodeString& toLocalizedPattern(UnicodeString& result) const;
1818 
1848  virtual void applyPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status);
1849 
1858  virtual void applyPattern(const UnicodeString& pattern, UErrorCode& status);
1859 
1890  virtual void applyLocalizedPattern(const UnicodeString& pattern, UParseError& parseError,
1891  UErrorCode& status);
1892 
1902  virtual void applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status);
1903 
1904 
1914  void setMaximumIntegerDigits(int32_t newValue) U_OVERRIDE;
1915 
1925  void setMinimumIntegerDigits(int32_t newValue) U_OVERRIDE;
1926 
1936  void setMaximumFractionDigits(int32_t newValue) U_OVERRIDE;
1937 
1947  void setMinimumFractionDigits(int32_t newValue) U_OVERRIDE;
1948 
1956  int32_t getMinimumSignificantDigits() const;
1957 
1965  int32_t getMaximumSignificantDigits() const;
1966 
1978  void setMinimumSignificantDigits(int32_t min);
1979 
1991  void setMaximumSignificantDigits(int32_t max);
1992 
1999  UBool areSignificantDigitsUsed() const;
2000 
2008  void setSignificantDigitsUsed(UBool useSignificantDigits);
2009 
2022  void setCurrency(const char16_t* theCurrency, UErrorCode& ec) U_OVERRIDE;
2023 
2024 #ifndef U_FORCE_HIDE_DEPRECATED_API
2025 
2030  virtual void setCurrency(const char16_t* theCurrency);
2031 #endif // U_FORCE_HIDE_DEPRECATED_API
2032 
2041  void setCurrencyUsage(UCurrencyUsage newUsage, UErrorCode* ec);
2042 
2047  UCurrencyUsage getCurrencyUsage() const;
2048 
2049 #ifndef U_HIDE_INTERNAL_API
2050 
2056  void formatToDecimalQuantity(double number, number::impl::DecimalQuantity& output,
2057  UErrorCode& status) const;
2058 
2065  void formatToDecimalQuantity(const Formattable& number, number::impl::DecimalQuantity& output,
2066  UErrorCode& status) const;
2067 
2068 #endif /* U_HIDE_INTERNAL_API */
2069 
2070 #ifndef U_HIDE_DRAFT_API
2071 
2116  const number::LocalizedNumberFormatter* toNumberFormatter(UErrorCode& status) const;
2117 #endif /* U_HIDE_DRAFT_API */
2118 
2130  static UClassID U_EXPORT2 getStaticClassID(void);
2131 
2143  UClassID getDynamicClassID(void) const U_OVERRIDE;
2144 
2145  private:
2146 
2148  void touch(UErrorCode& status);
2149 
2151  void touchNoError();
2152 
2164  void setPropertiesFromPattern(const UnicodeString& pattern, int32_t ignoreRounding,
2165  UErrorCode& status);
2166 
2167  const numparse::impl::NumberParserImpl* getParser(UErrorCode& status) const;
2168 
2169  const numparse::impl::NumberParserImpl* getCurrencyParser(UErrorCode& status) const;
2170 
2171  static void fieldPositionHelper(const number::FormattedNumber& formatted, FieldPosition& fieldPosition,
2172  int32_t offset, UErrorCode& status);
2173 
2174  static void fieldPositionIteratorHelper(const number::FormattedNumber& formatted,
2175  FieldPositionIterator* fpi, int32_t offset, UErrorCode& status);
2176 
2177  void setupFastFormat();
2178 
2179  bool fastFormatDouble(double input, UnicodeString& output) const;
2180 
2181  bool fastFormatInt64(int64_t input, UnicodeString& output) const;
2182 
2183  void doFastFormatInt32(int32_t input, bool isNegative, UnicodeString& output) const;
2184 
2185  //=====================================================================================//
2186  // INSTANCE FIELDS //
2187  //=====================================================================================//
2188 
2189 
2190  // One instance field for the implementation, keep all fields inside of an implementation
2191  // class defined in number_mapper.h
2192  number::impl::DecimalFormatFields* fields = nullptr;
2193 
2194  // Allow child class CompactDecimalFormat to access fProperties:
2195  friend class CompactDecimalFormat;
2196 
2197  // Allow MeasureFormat to use fieldPositionHelper:
2198  friend class MeasureFormat;
2199 
2200 };
2201 
2202 U_NAMESPACE_END
2203 
2204 #endif /* #if !UCONFIG_NO_FORMATTING */
2205 
2206 #endif /* U_SHOW_CPLUSPLUS_API */
2207 
2208 #endif // _DECIMFMT
2209 //eof
Base class for all formats.
Definition: format.h:98
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:86
#define U_OVERRIDE
Defined to the C++11 "override" keyword if available.
Definition: umachine.h:129
IMPORTANT: New users are strongly encouraged to see if numberformatter.h fits their use case...
Definition: decimfmt.h:668
C++ API: FieldPosition Iterator.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
IMPORTANT: New users are strongly encouraged to see if numberformatter.h fits their use case...
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:301
C++ API: StringPiece: Read-only byte string wrapper class.
C++ API: Currency Amount Object.
UNumberFormatStyle
The possible number format styles.
Definition: unum.h:146
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:58
UCurrencyUsage
Currency Usage used for Decimal Format.
Definition: ucurr.h:41
EPadPosition
Pad position.
Definition: decimfmt.h:674
A NumberFormatter that has a locale associated with it; this means .format() methods are available...
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:110
ERoundingMode
Rounding mode.
Definition: numfmt.h:186
C++ API: Symbols for formatting numbers.
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:52
C++ API: Locale ID object.
This class represents the information needed by DecimalFormat to format currency plural, such as "3.00 US dollars" or "1.00 US dollar".
Definition: currpinf.h:48
A UParseError struct is used to returned detailed information about parsing errors.
Definition: parseerr.h:58
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:294
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:64
The result of a number formatting operation.
C++: internal template EnumSet<>
C++ API: Compatibility APIs for number formatting.
UNumberFormatAttribute
The possible UNumberFormat numeric attributes.
Definition: unum.h:969
A string-like object that points to a sized piece of memory.
Definition: stringpiece.h:60
A currency together with a numeric amount, such as 200 USD.
Definition: curramt.h:39
int8_t UBool
The ICU boolean type.
Definition: umachine.h:261