xref: /PHP-7.2/ext/intl/doc/formatter_api.php (revision 9762609c)
1<?php
2
3/**
4 * Number formatter class - locale-dependent number formatting/parsing.
5 *
6 * This class represents the ICU number formatting functionality. It allows to display
7 * number according to the localized format or given pattern or set of rules, and to
8 * parse strings into numbers according to the above patterns.
9 *
10 * Example:
11 * <code>
12 * $value = 1234567;
13 * $formatter = new NumberFormatter("de_DE", NumberFormatter::DECIMAL);
14 * echo $formatter->format($value);
15 * </code>
16 *
17 * @see http://www.icu-project.org/apiref/icu4c/unum_8h.html
18 * @see http://www.icu-project.org/apiref/icu4c/classNumberFormat.html
19 *
20 * The class would also contain all the constants listed in the following enums:
21 * UNumberFormatStyle, UNumberFormatRoundingMode, UNumberFormatPadPosition,
22 * UNumberFormatAttribute, UNumberFormatTextAttribute, UNumberFormatSymbol.
23 */
24class NumberFormatter {
25#############################################################################
26# Common constants.
27#############################################################################
28
29	/*
30	 * WARNING:
31	 * The values described here are NOT the actual values in PHP code.
32	 * They are references to the ICU C definitions, so the line
33	 *    const PATTERN_DECIMAL = 'UNUM_PATTERN_DECIMAL';
34	 * actually means that NumberFormatter::PATTERN_DECIMAL is the same as
35	 * UNUM_PATTERN_DECIMAL constant in the ICU library.
36	 */
37
38	/*
39	 * These constants define formatter/parser argument type - integer, floating point or currency.
40	 */
41	const TYPE_DEFAULT     = 'FORMAT_TYPE_DEFAULT';
42	const TYPE_INT32       = 'FORMAT_TYPE_INT32';
43	const TYPE_INT64       = 'FORMAT_TYPE_INT64';
44	const TYPE_DOUBLE      = 'FORMAT_TYPE_DOUBLE';
45	const TYPE_CURRENCY    = 'FORMAT_TYPE_CURRENCY';
46
47	/*
48	 * UNumberFormatStyle constants
49	 */
50	const PATTERN_DECIMAL   = 'UNUM_PATTERN_DECIMAL';
51	const DECIMAL           = 'UNUM_DECIMAL';
52	const CURRENCY          = 'UNUM_CURRENCY';
53	const PERCENT           = 'UNUM_PERCENT';
54	const SCIENTIFIC        = 'UNUM_SCIENTIFIC';
55	const SPELLOUT          = 'UNUM_SPELLOUT';
56	const ORDINAL           = 'UNUM_ORDINAL';
57	const DURATION          = 'UNUM_DURATION';
58	const PATTERN_RULEBASED = 'UNUM_PATTERN_RULEBASED';
59	const DEFAULT           = 'UNUM_DEFAULT';
60	const IGNORE            = 'UNUM_IGNORE';
61
62	/*
63	 * UNumberFormatRoundingMode
64	 */
65	const ROUND_CEILING  = 'UNUM_ROUND_CEILING';
66	const ROUND_FLOOR    = 'UNUM_ROUND_FLOOR';
67	const ROUND_DOWN     = 'UNUM_ROUND_DOWN';
68	const ROUND_UP       = 'UNUM_ROUND_UP';
69	const ROUND_HALFEVEN = 'UNUM_ROUND_HALFEVEN';
70	const ROUND_HALFDOWN = 'UNUM_ROUND_HALFDOWN';
71	const ROUND_HALFUP   = 'UNUM_ROUND_HALFUP';
72
73	/*
74	 * UNumberFormatPadPosition
75	 */
76	const PAD_BEFORE_PREFIX = 'UNUM_PAD_BEFORE_PREFIX';
77	const PAD_AFTER_PREFIX  = 'UNUM_PAD_AFTER_PREFIX';
78	const PAD_BEFORE_SUFFIX = 'UNUM_PAD_BEFORE_SUFFIX';
79	const PAD_AFTER_SUFFIX  = 'UNUM_PAD_AFTER_SUFFIX';
80
81	/*
82	 * UNumberFormatAttribute
83	 */
84	const PARSE_INT_ONLY          = 'UNUM_PARSE_INT_ONLY';
85	const GROUPING_USED           = 'UNUM_GROUPING_USED';
86	const DECIMAL_ALWAYS_SHOWN    = 'UNUM_DECIMAL_ALWAYS_SHOWN';
87	const MAX_INTEGER_DIGITS      = 'UNUM_MAX_INTEGER_DIGITS';
88	const MIN_INTEGER_DIGITS      = 'UNUM_MIN_INTEGER_DIGITS';
89	const INTEGER_DIGITS          = 'UNUM_INTEGER_DIGITS';
90	const MAX_FRACTION_DIGITS     = 'UNUM_MAX_FRACTION_DIGITS';
91	const MIN_FRACTION_DIGITS     = 'UNUM_MIN_FRACTION_DIGITS';
92	const FRACTION_DIGITS         = 'UNUM_FRACTION_DIGITS';
93	const MULTIPLIER              = 'UNUM_MULTIPLIER';
94	const GROUPING_SIZE           = 'UNUM_GROUPING_SIZE';
95	const ROUNDING_MODE           = 'UNUM_ROUNDING_MODE';
96	const ROUNDING_INCREMENT      = 'UNUM_ROUNDING_INCREMENT';
97	const FORMAT_WIDTH            = 'UNUM_FORMAT_WIDTH';
98	const PADDING_POSITION        = 'UNUM_PADDING_POSITION';
99	const SECONDARY_GROUPING_SIZE = 'UNUM_SECONDARY_GROUPING_SIZE';
100	const SIGNIFICANT_DIGITS_USED = 'UNUM_SIGNIFICANT_DIGITS_USED';
101	const MIN_SIGNIFICANT_DIGITS  = 'UNUM_MIN_SIGNIFICANT_DIGITS';
102	const MAX_SIGNIFICANT_DIGITS  = 'UNUM_MAX_SIGNIFICANT_DIGITS';
103	const LENIENT_PARSE           = 'UNUM_LENIENT_PARSE';
104
105	/*
106	 * UNumberFormatTextAttribute
107	 */
108	const POSITIVE_PREFIX   = 'UNUM_POSITIVE_PREFIX';
109	const POSITIVE_SUFFIX   = 'UNUM_POSITIVE_SUFFIX';
110	const NEGATIVE_PREFIX   = 'UNUM_NEGATIVE_PREFIX';
111	const NEGATIVE_SUFFIX   = 'UNUM_NEGATIVE_SUFFIX';
112	const PADDING_CHARACTER = 'UNUM_PADDING_CHARACTER';
113	const CURRENCY_CODE     = 'UNUM_CURRENCY_CODE';
114	const DEFAULT_RULESET   = 'UNUM_DEFAULT_RULESET';
115	const PUBLIC_RULESETS   = 'UNUM_PUBLIC_RULESETS';
116
117	/*
118	 * UNumberFormatSymbol
119	 */
120	const DECIMAL_SEPARATOR_SYMBOL           = 'UNUM_DECIMAL_SEPARATOR_SYMBOL';
121	const GROUPING_SEPARATOR_SYMBOL          = 'UNUM_GROUPING_SEPARATOR_SYMBOL';
122	const PATTERN_SEPARATOR_SYMBOL           = 'UNUM_PATTERN_SEPARATOR_SYMBOL';
123	const PERCENT_SYMBOL                     = 'UNUM_PERCENT_SYMBOL';
124	const ZERO_DIGIT_SYMBOL                  = 'UNUM_ZERO_DIGIT_SYMBOL';
125	const DIGIT_SYMBOL                       = 'UNUM_DIGIT_SYMBOL';
126	const MINUS_SIGN_SYMBOL                  = 'UNUM_MINUS_SIGN_SYMBOL';
127	const PLUS_SIGN_SYMBOL                   = 'UNUM_PLUS_SIGN_SYMBOL';
128	const CURRENCY_SYMBOL                    = 'UNUM_CURRENCY_SYMBOL';
129	const INTL_CURRENCY_SYMBOL               = 'UNUM_INTL_CURRENCY_SYMBOL';
130	const MONETARY_SEPARATOR_SYMBOL          = 'UNUM_MONETARY_SEPARATOR_SYMBOL';
131	const EXPONENTIAL_SYMBOL                 = 'UNUM_EXPONENTIAL_SYMBOL';
132	const PERMILL_SYMBOL                     = 'UNUM_PERMILL_SYMBOL';
133	const PAD_ESCAPE_SYMBOL                  = 'UNUM_PAD_ESCAPE_SYMBOL';
134	const INFINITY_SYMBOL                    = 'UNUM_INFINITY_SYMBOL';
135	const NAN_SYMBOL                         = 'UNUM_NAN_SYMBOL';
136	const SIGNIFICANT_DIGIT_SYMBOL           = 'UNUM_SIGNIFICANT_DIGIT_SYMBOL';
137	const MONETARY_GROUPING_SEPARATOR_SYMBOL = 'UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL';
138
139	/**
140	 * Create a number formatter
141	 *
142	 * Creates a number formatter from locale and pattern. This formatter would be used to
143	 * format or parse numbers.
144	 *
145	 * @param integer $style     Style of the formatting, one of the UNumberFormatStyle constants
146	 * @param string $locale     Locale in which the number would be formatted
147	 * @param [string] $pattern  Pattern string in case chose style requires pattern
148	 * @return NumberFormatter
149	 */
150	public function __construct($locale, $style, $pattern = null) {}
151
152	/**
153	 * Create a number formatter
154	 *
155	 * Creates a number formatter from locale and pattern. This formatter would be used to
156	 * format or parse numbers.
157	 *
158	 * This method is useful when you prefer just to get null on error,
159	 * as if you called numfmt_create().
160	 *
161	 * @param integer  $style    Style of the formatting, one of the UNumberFormatStyle constants
162	 * @param string   $locale   Locale in which the number would be formatted
163	 * @param [string] $pattern  Pattern string in case chose style requires pattern
164	 * @return NumberFormatter
165	 * @see __construct
166	 * @see numfmt_create
167	 */
168	public static function create($locale, $style, $pattern = null) {}
169
170	/**
171	 * Format a number according to current formatting rules.
172	 *
173	 * If the type is not specified, the type is derived from the $number parameter. I.e., if it's
174	 * integer then INT32 would be chosen on 32-bit, INT64 on 64-bit, if it's double, DOUBLE would be
175	 * chosen. It is possible to format 64-bit number on 32-bit machine by passing it as double and using
176	 * TYPE_INT64.
177	 * When formatting currency, default formatter's currency code is used.
178	 *
179	 * @param integer|double $number Number to format
180	 * @param [integer]      $type   Type of the formatting - one of TYPE constants. If not specified, default for the type.
181	 * @return string formatted number
182	 */
183	public function format($number, $type = 0) {}
184
185	/**
186	 * Parse a number according to current formatting rules.
187	 *
188	 * @param string     $string   String to parse
189	 * @param [integer]  $type     Type of the formatting - one of TYPE constants.
190	 *                             TYPE_DOUBLE is used by default.
191	 * @param [integer]  $position On input, the position to start parsing, default is 0;
192	 *                             on output, moved to after the last successfully parse character;
193	 *                             on parse failure, does not change.
194	 * @return integer|double|false  Parsed number, false if parsing failed
195	 */
196	public function parse($string, $type, &$position) {}
197
198	/**
199	 * Format number as currency.
200	 *
201	 * Uses user-defined currency string.
202	 *
203	 * @param double $number    Number to format
204	 * @param string $currency  3-letter currency code (ISO 4217) to use in format
205	 */
206	public function formatCurrency($number, $currency) {}
207
208	/**
209	 * Parse currency string
210	 *
211	 * This parser would use parseCurrency API string to parse currency string. The format is defined by the
212	 * formatter, returns both number and currency code.
213	 *
214	 * @param string    $string    String to parse
215	 * @param string    $currency  Parameter to return parsed currency code
216	 * @param [integer] $position  On input, the position within text to match, default is 0;
217	 *                             on output, the position after the last matched character;
218	 *                             on parse failure, does not change.
219	 * @return double currency number
220	 */
221	public function parseCurrency($string, &$currency, &$position) {}
222
223	/**
224	 * Set formatter attribute.
225	 *
226	 * This function is used to set any of the formatter attributes. Example:
227	 *
228	 * $formatter->setAttribute(NumberFormat::FORMAT_WIDTH, 10);
229 	 *
230	 * @param integer        $attr  One of UNumberFormatAttribute constants
231	 * @param integer|double $value Value of the attribute
232	 * @return false if attribute is unknown or can not be set, true otherwise
233	 */
234	public function setAttribute($attr, $value) {}
235	/**
236	 * Set formatter attribute.
237	 *
238	 * This function is used to set any of the formatter attributes. Example:
239	 *
240	 * $formatter->setTextAttribute(NumberFormat::POSITIVE_PREFIX, "+");
241	 *
242	 * @param integer $attr  One of UNumberFormatTextAttribute constants
243	 * @param string  $value Value of the attribute
244	 * @return false if attribute is unknown or can not be set, true otherwise
245	 */
246	public function setTextAttribute($attr, $value) {}
247	/**
248	 * Set formatting symbol.
249	 *
250	 * Example:
251	 *
252	 * $formatter->setSymbol(NumberFormat::EXPONENTIAL_SYMBOL, "E");
253	 *
254	 * @param integer|array $attr  One of UNumberFormatSymbol constants or array of symbols, indexed by
255	 * 								these constants
256	 * @param string        $value Value of the symbol
257	 */
258	public function setSymbol($attr, $value) {}
259	/**
260	 * Set pattern used by the formatter
261	 *
262	 * Valid only if the formatter is using pattern and is not rule-based.
263	 * @see http://www.icu-project.org/apiref/icu4c/classDecimalFormat.html
264	 * Localized patterns are not currently supported.
265	 *
266	 * @param string $pattern  The pattern to be used.
267	 * @return boolean         false if formatter pattern could not be set, true otherwise
268	 */
269	public function setPattern($pattern) {}
270	/**
271	 * Get value of the formatter attribute
272	 *
273	 * @param integer $attr One of UNumberFormatAttribute constants
274	 * @return integer|double value of the attribute or false if the value can not be obtained
275	 */
276	public function getAttribute($attr) {}
277	/**
278	 * Get value of the formatter attribute
279	 *
280	 * @param integer $attr One of UNumberFormatTextAttribute constants
281	 * @return string value of the attribute or false if the value can not be obtained
282	 */
283	public function getTextAttribute($attr) {}
284	/**
285	 * Get value of the formatter symbol
286	 *
287	 * @param integer $attr One of UNumberFormatSymbol constants specifying the symbol
288	 * @return string|false The symbol value, or false if the value can not be obtained
289	 */
290	public function getSymbol($attr) {}
291	/**
292	 * Get pattern used by the formatter.
293	 *
294	 * Gets current state of the formatter as a pattern.
295	 * Localized patterns are not currently supported.
296	 *
297	 * Valid only if the formatter is UNUM_PATTERN_DECIMAL
298	 * @return string|false The pattern used by the formatter or false if formatter is of a type
299	 *                      that does not support patterns.
300	 */
301	public function getPattern() {}
302	/**
303	 * Get the locale for which the formatter was created.
304	 *
305	 * @param [integer] $type One of  ULocDataLocaleType  values
306	 * @return string locale name
307	 */
308	public function getLocale($type = 0) {}
309	/**
310	 * Get the error code from last operation
311	 *
312	 * Returns error code from the last number formatting operation.
313	 *
314	 * @return integer the error code, one of UErrorCode values. Initial value is U_ZERO_ERROR.
315	 */
316	public function getErrorCode() {}
317	/**
318	 * Get the error text from the last operation.
319	 *
320	 * @return string Description of the last occurred error.
321	 */
322	public public function getErrorMessage() {}
323
324}
325
326/** Now the same as procedural API */
327
328/**
329 * Create a number formatter
330 *
331 * Creates a number formatter from locale and pattern. This formatter would be used to
332 * format or parse numbers.
333 *
334 * @param string   $locale   Locale in which the number would be formatted
335 * @param integer  $style    Style of the formatting, one of the UNumberFormatStyle constants
336 * @param [string] $pattern  Pattern string in case chose style requires pattern
337 * @return Numberformatter resource NumberFormatter
338 */
339function numfmt_create($locale, $style, $pattern = null) {}
340/**
341 * Format a number according to current formatting rules.
342 *
343 * If the type is not specified, the type is derived from the $number parameter. I.e., if it's
344 * integer then INT32 would be chosen on 32-bit, INT64 on 64-bit, if it's double, DOUBLE would be
345 * chosen. It is possible to format 64-bit number on 32-bit machine by passing it as double and using
346 * TYPE_INT64.
347 *
348 * @param NumberFormatter $formatter The formatter resource
349 * @param integer|double  $number	 Number to format
350 * @param [integer]       $type		 Type of the formatting - one of TYPE constants. If not specified, default for the type.
351 * @return string formatted number
352 */
353function numfmt_format($formatter, $number, $type = null) {}
354/**
355 * Parse a number according to current formatting rules.
356 *
357 * This parser uses DOUBLE type by default. When parsing currency,
358 * default currency definitions are used.
359 *
360 * @param NumberFormatter $formatter       The formatter resource
361 * @param string                 $string   String to parse
362 * @param [integer]              $type     Type of the formatting - one of TYPE constants.
363 * @param [integer]              $position String position after the end of parsed data.
364 * @return integer|double|false  Parsed number, false if parsing failed
365 */
366function numfmt_parse($formatter, $string, $type, &$position) {}
367/**
368 * Format number as currency.
369 *
370 * Uses user-defined currency string.
371 *
372 * @param NumberFormatter $formatter The formatter resource
373 * @param double          $number    Number to format
374 * @param string          $currency  3-letter currency code (ISO 4217) to use in format
375 */
376function numfmt_format_currency($formatter, $number, $currency) {}
377/**
378 * Parse currency string
379 *
380 * This parser would use parseCurrency API string to parse currency string. The format is defined by the
381 * formatter, returns both number and currency code.
382 *
383 * @param NumberFormatter $formatter The formatter resource
384 * @param string          $string    String to parse
385 * @param string          $currency  Parameter to return parsed currency code
386 * @param [integer]       $position  String position after the end of parsed data.
387 * @return double currency number
388 */
389function numfmt_parse_currency($formatter, $string, &$currency, &$position) {}
390/**
391 * Set formatter attribute.
392 *
393 * This function is used to set any of the formatter attributes. Example:
394 *
395 * numfmt_format_set_attribute($formatter, NumberFormat::FORMAT_WIDTH, 10);
396 *
397 * @param NumberFormatter $formatter The formatter resource
398 * @param integer         $attr      One of UNumberFormatAttribute constants
399 * @param integer|double  $value     Value of the attribute
400 * @return false if attribute is unknown or can not be set, true otherwise
401 */
402function numfmt_set_attribute($formatter, $attribute, $value) {}
403/**
404 * Set formatter attribute.
405 *
406 * This function is used to set any of the formatter attributes. Example:
407 *
408 * numfmt_format_set_text_attribute($formatter, NumberFormat::POSITIVE_PREFIX, "+");
409 *
410 * @param NumberFormatter $formatter The formatter resource
411 * @param integer         $attr      One of UNumberFormatTextAttribute constants
412 * @param string          $value     Value of the attribute
413 * @return false if attribute is unknown or can not be set, true otherwise
414 */
415function numfmt_set_text_attribute($formatter, $attribute, $value) {}
416/**
417 * Set formatting symbol.
418 *
419 * Example:
420 *
421 * $formatter->setSymbol(NumberFormat::EXPONENTIAL_SYMBOL, "E");
422 *
423 * @param NumberFormatter $formatter The formatter resource
424 * @param integer|array   $attr      One of UNumberFormatSymbol constants or array of symbols,
425 *                                   indexed by these constants
426 * @param string $value Value of the symbol
427 */
428function numfmt_set_symbol($formatter, $attribute, $value) {}
429/**
430 * Set pattern used by the formatter
431 *
432 * Valid only if the formatter is using pattern and is not rule-based.
433 * @see http://www.icu-project.org/apiref/icu4c/classDecimalFormat.html
434 * Localized patterns are not currently supported.
435 *
436 * @param NumberFormatter $formatter The formatter resource
437 * @param string          $pattern   The pattern to be used.
438 * @return boolean false if formatter pattern could not be set, true otherwise
439 */
440function numfmt_set_pattern($formatter, $pattern) {}
441/**
442 * Get value of the formatter attribute
443 *
444 * @param NumberFormatter $formatter The formatter resource
445 * @param integer         $attribute One of UNumberFormatAttribute constants
446 * @return integer|double value of the attribute or false if the value can not be obtained
447 */
448function numfmt_get_attribute($formatter, $attribute) {}
449/**
450 * Get value of the formatter attribute
451 *
452 * @param NumberFormatter $formatter The formatter resource
453 * @param integer         $attribute One of UNumberFormatTextAttribute constants
454 * @return string value of the attribute or false if the value can not be obtained
455 */
456function numfmt_get_text_attribute($formatter, $attribute) {}
457/**
458 * Get value of the formatter symbol
459 *
460 * @param NumberFormatter $formatter The formatter resource
461 * @param integer         $attribute One of UNumberFormatSymbol constants specifying the symbol
462 * @return string|false The symbol value, or false if the value can not be obtained
463 */
464function numfmt_get_symbol($formatter, $attribute) {}
465/**
466 * Get pattern used by the formatter.
467 *
468 * Gets current state of the formatter as a pattern.
469 * Localized patterns are not currently supported.
470 *
471 * Valid only if the formatter is   UNUM_PATTERN_DECIMAL
472 * @param NumberFormatter $formatter The formatter resource
473 * @return string|false The pattern used by the formatter or false if formatter is of a type
474 *                      that does not support patterns.
475 */
476function numfmt_get_pattern($formatter) {}
477/**
478 * Get the locale for which the formatter was created.
479 *
480 * @param NumberFormatter $formatter The formatter resource
481 * @param [integer]       $type      One of ULocDataLocaleType values
482 * @return string locale name
483 */
484function numfmt_get_locale($formatter, $type = 0) {}
485/**
486 * Get the error code from last operation
487 *
488 * Returns error code from the last number formatting operation.
489 *
490 * @param NumberFormatter $formatter The formatter resource
491 * @return integer the error code, one of UErrorCode values. Initial value is U_ZERO_ERROR.
492 */
493function numfmt_get_error_code($formatter) {}
494/**
495 * Get the error text from the last operation.
496 *
497 * @param NumberFormatter $formatter The formatter resource
498 * @return string Description of the last occurred error.
499 */
500function numfmt_get_error_message($formatter) {}
501