• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // © 2017 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 
4 #ifndef __UNUMBEROPTIONS_H__
5 #define __UNUMBEROPTIONS_H__
6 
7 #include "unicode/utypes.h"
8 
9 #if !UCONFIG_NO_FORMATTING
10 
11 /**
12  * \file
13  * \brief C API: Header-only input options for various number formatting APIs.
14  *
15  * You do not normally need to include this header file directly, because it is included in all
16  * files that use these enums.
17  */
18 
19 
20 /** The possible number format rounding modes.
21  *
22  * <p>
23  * For more detail on rounding modes, see:
24  * https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes
25  *
26  * @stable ICU 2.0
27  */
28 typedef enum UNumberFormatRoundingMode {
29     UNUM_ROUND_CEILING,
30     UNUM_ROUND_FLOOR,
31     UNUM_ROUND_DOWN,
32     UNUM_ROUND_UP,
33     /**
34      * Half-even rounding
35      * @stable, ICU 3.8
36      */
37     UNUM_ROUND_HALFEVEN,
38 #ifndef U_HIDE_DEPRECATED_API
39     /**
40      * Half-even rounding, misspelled name
41      * @deprecated, ICU 3.8
42      */
43     UNUM_FOUND_HALFEVEN = UNUM_ROUND_HALFEVEN,
44 #endif  /* U_HIDE_DEPRECATED_API */
45     UNUM_ROUND_HALFDOWN = UNUM_ROUND_HALFEVEN + 1,
46     UNUM_ROUND_HALFUP,
47     /**
48       * ROUND_UNNECESSARY reports an error if formatted result is not exact.
49       * @stable ICU 4.8
50       */
51     UNUM_ROUND_UNNECESSARY,
52     /**
53      * Rounds ties toward the odd number.
54      * @stable ICU 69
55      */
56     UNUM_ROUND_HALF_ODD,
57     /**
58      * Rounds ties toward +∞.
59      * @stable ICU 69
60      */
61     UNUM_ROUND_HALF_CEILING,
62     /**
63      * Rounds ties toward -∞.
64      * @stable ICU 69
65      */
66     UNUM_ROUND_HALF_FLOOR,
67 } UNumberFormatRoundingMode;
68 
69 
70 /**
71  * An enum declaring the strategy for when and how to display grouping separators (i.e., the
72  * separator, often a comma or period, after every 2-3 powers of ten). The choices are several
73  * pre-built strategies for different use cases that employ locale data whenever possible. Example
74  * outputs for 1234 and 1234567 in <em>en-IN</em>:
75  *
76  * <ul>
77  * <li>OFF: 1234 and 12345
78  * <li>MIN2: 1234 and 12,34,567
79  * <li>AUTO: 1,234 and 12,34,567
80  * <li>ON_ALIGNED: 1,234 and 12,34,567
81  * <li>THOUSANDS: 1,234 and 1,234,567
82  * </ul>
83  *
84  * <p>
85  * The default is AUTO, which displays grouping separators unless the locale data says that grouping
86  * is not customary. To force grouping for all numbers greater than 1000 consistently across locales,
87  * use ON_ALIGNED. On the other hand, to display grouping less frequently than the default, use MIN2
88  * or OFF. See the docs of each option for details.
89  *
90  * <p>
91  * Note: This enum specifies the strategy for grouping sizes. To set which character to use as the
92  * grouping separator, use the "symbols" setter.
93  *
94  * @stable ICU 63
95  */
96 typedef enum UNumberGroupingStrategy {
97     /**
98      * Do not display grouping separators in any locale.
99      *
100      * @stable ICU 61
101      */
102             UNUM_GROUPING_OFF,
103 
104     /**
105      * Display grouping using locale defaults, except do not show grouping on values smaller than
106      * 10000 (such that there is a <em>minimum of two digits</em> before the first separator).
107      *
108      * <p>
109      * Note that locales may restrict grouping separators to be displayed only on 1 million or
110      * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
111      *
112      * <p>
113      * Locale data is used to determine whether to separate larger numbers into groups of 2
114      * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
115      *
116      * @stable ICU 61
117      */
118             UNUM_GROUPING_MIN2,
119 
120     /**
121      * Display grouping using the default strategy for all locales. This is the default behavior.
122      *
123      * <p>
124      * Note that locales may restrict grouping separators to be displayed only on 1 million or
125      * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
126      *
127      * <p>
128      * Locale data is used to determine whether to separate larger numbers into groups of 2
129      * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
130      *
131      * @stable ICU 61
132      */
133             UNUM_GROUPING_AUTO,
134 
135     /**
136      * Always display the grouping separator on values of at least 1000.
137      *
138      * <p>
139      * This option ignores the locale data that restricts or disables grouping, described in MIN2 and
140      * AUTO. This option may be useful to normalize the alignment of numbers, such as in a
141      * spreadsheet.
142      *
143      * <p>
144      * Locale data is used to determine whether to separate larger numbers into groups of 2
145      * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
146      *
147      * @stable ICU 61
148      */
149             UNUM_GROUPING_ON_ALIGNED,
150 
151     /**
152      * Use the Western defaults: groups of 3 and enabled for all numbers 1000 or greater. Do not use
153      * locale data for determining the grouping strategy.
154      *
155      * @stable ICU 61
156      */
157             UNUM_GROUPING_THOUSANDS
158 
159 #ifndef U_HIDE_INTERNAL_API
160     ,
161     /**
162      * One more than the highest UNumberGroupingStrategy value.
163      *
164      * @internal ICU 62: The numeric value may change over time; see ICU ticket #12420.
165      */
166             UNUM_GROUPING_COUNT
167 #endif  /* U_HIDE_INTERNAL_API */
168 
169 } UNumberGroupingStrategy;
170 
171 
172 #endif /* #if !UCONFIG_NO_FORMATTING */
173 #endif //__UNUMBEROPTIONS_H__
174