OLD | NEW |
(Empty) | |
| 1 /* |
| 2 ******************************************************************************* |
| 3 * Copyright (C) 1997-2010, International Business Machines Corporation and other
s. |
| 4 * All Rights Reserved. |
| 5 * Modification History: |
| 6 * |
| 7 * Date Name Description |
| 8 * 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixe
s |
| 9 ******************************************************************************* |
| 10 */ |
| 11 |
| 12 #ifndef _UNUM |
| 13 #define _UNUM |
| 14 |
| 15 #include "unicode/utypes.h" |
| 16 |
| 17 #if !UCONFIG_NO_FORMATTING |
| 18 |
| 19 #include "unicode/localpointer.h" |
| 20 #include "unicode/uloc.h" |
| 21 #include "unicode/umisc.h" |
| 22 #include "unicode/parseerr.h" |
| 23 /** |
| 24 * \file |
| 25 * \brief C API: NumberFormat |
| 26 * |
| 27 * <h2> Number Format C API </h2> |
| 28 * |
| 29 * Number Format C API Provides functions for |
| 30 * formatting and parsing a number. Also provides methods for |
| 31 * determining which locales have number formats, and what their names |
| 32 * are. |
| 33 * <P> |
| 34 * UNumberFormat helps you to format and parse numbers for any locale. |
| 35 * Your code can be completely independent of the locale conventions |
| 36 * for decimal points, thousands-separators, or even the particular |
| 37 * decimal digits used, or whether the number format is even decimal. |
| 38 * There are different number format styles like decimal, currency, |
| 39 * percent and spellout. |
| 40 * <P> |
| 41 * To format a number for the current Locale, use one of the static |
| 42 * factory methods: |
| 43 * <pre> |
| 44 * \code |
| 45 * UChar myString[20]; |
| 46 * double myNumber = 7.0; |
| 47 * UErrorCode status = U_ZERO_ERROR; |
| 48 * UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status)
; |
| 49 * unum_formatDouble(nf, myNumber, myString, 20, NULL, &status); |
| 50 * printf(" Example 1: %s\n", austrdup(myString) ); //austrdup( a function us
ed to convert UChar* to char*) |
| 51 * \endcode |
| 52 * </pre> |
| 53 * If you are formatting multiple numbers, it is more efficient to get |
| 54 * the format and use it multiple times so that the system doesn't |
| 55 * have to fetch the information about the local language and country |
| 56 * conventions multiple times. |
| 57 * <pre> |
| 58 * \code |
| 59 * uint32_t i, resultlength, reslenneeded; |
| 60 * UErrorCode status = U_ZERO_ERROR; |
| 61 * UFieldPosition pos; |
| 62 * uint32_t a[] = { 123, 3333, -1234567 }; |
| 63 * const uint32_t a_len = sizeof(a) / sizeof(a[0]); |
| 64 * UNumberFormat* nf; |
| 65 * UChar* result = NULL; |
| 66 * |
| 67 * nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status); |
| 68 * for (i = 0; i < a_len; i++) { |
| 69 * resultlength=0; |
| 70 * reslenneeded=unum_format(nf, a[i], NULL, resultlength, &pos, &status); |
| 71 * result = NULL; |
| 72 * if(status==U_BUFFER_OVERFLOW_ERROR){ |
| 73 * status=U_ZERO_ERROR; |
| 74 * resultlength=reslenneeded+1; |
| 75 * result=(UChar*)malloc(sizeof(UChar) * resultlength); |
| 76 * unum_format(nf, a[i], result, resultlength, &pos, &status); |
| 77 * } |
| 78 * printf( " Example 2: %s\n", austrdup(result)); |
| 79 * free(result); |
| 80 * } |
| 81 * \endcode |
| 82 * </pre> |
| 83 * To format a number for a different Locale, specify it in the |
| 84 * call to unum_open(). |
| 85 * <pre> |
| 86 * \code |
| 87 * UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, "fr_FR", NULL, &suc
cess) |
| 88 * \endcode |
| 89 * </pre> |
| 90 * You can use a NumberFormat API unum_parse() to parse. |
| 91 * <pre> |
| 92 * \code |
| 93 * UErrorCode status = U_ZERO_ERROR; |
| 94 * int32_t pos=0; |
| 95 * int32_t num; |
| 96 * num = unum_parse(nf, str, u_strlen(str), &pos, &status); |
| 97 * \endcode |
| 98 * </pre> |
| 99 * Use UNUM_DECIMAL to get the normal number format for that country. |
| 100 * There are other static options available. Use UNUM_CURRENCY |
| 101 * to get the currency number format for that country. Use UNUM_PERCENT |
| 102 * to get a format for displaying percentages. With this format, a |
| 103 * fraction from 0.53 is displayed as 53%. |
| 104 * <P> |
| 105 * Use a pattern to create either a DecimalFormat or a RuleBasedNumberFormat |
| 106 * formatter. The pattern must conform to the syntax defined for those |
| 107 * formatters. |
| 108 * <P> |
| 109 * You can also control the display of numbers with such function as |
| 110 * unum_getAttribues() and unum_setAtributes(), which let you set the |
| 111 * miminum fraction digits, grouping, etc. |
| 112 * @see UNumberFormatAttributes for more details |
| 113 * <P> |
| 114 * You can also use forms of the parse and format methods with |
| 115 * ParsePosition and UFieldPosition to allow you to: |
| 116 * <ul type=round> |
| 117 * <li>(a) progressively parse through pieces of a string. |
| 118 * <li>(b) align the decimal point and other areas. |
| 119 * </ul> |
| 120 * <p> |
| 121 * It is also possible to change or set the symbols used for a particular |
| 122 * locale like the currency symbol, the grouping seperator , monetary seperator |
| 123 * etc by making use of functions unum_setSymbols() and unum_getSymbols(). |
| 124 */ |
| 125 |
| 126 /** A number formatter. |
| 127 * For usage in C programs. |
| 128 * @stable ICU 2.0 |
| 129 */ |
| 130 typedef void* UNumberFormat; |
| 131 |
| 132 /** The possible number format styles. |
| 133 * @stable ICU 2.0 |
| 134 */ |
| 135 typedef enum UNumberFormatStyle { |
| 136 /** |
| 137 * Decimal format defined by pattern |
| 138 * @stable ICU 3.0 |
| 139 */ |
| 140 UNUM_PATTERN_DECIMAL=0, |
| 141 /** Decimal format */ |
| 142 UNUM_DECIMAL=1, |
| 143 /** Currency format */ |
| 144 UNUM_CURRENCY, |
| 145 /** Percent format */ |
| 146 UNUM_PERCENT, |
| 147 /** Scientific format */ |
| 148 UNUM_SCIENTIFIC, |
| 149 /** Spellout rule-based format */ |
| 150 UNUM_SPELLOUT, |
| 151 /** |
| 152 * Ordinal rule-based format |
| 153 * @stable ICU 3.0 |
| 154 */ |
| 155 UNUM_ORDINAL, |
| 156 /** |
| 157 * Duration rule-based format |
| 158 * @stable ICU 3.0 |
| 159 */ |
| 160 UNUM_DURATION, |
| 161 /** |
| 162 * Numbering system rule-based format |
| 163 * @stable ICU 4.2 |
| 164 */ |
| 165 UNUM_NUMBERING_SYSTEM, |
| 166 /** |
| 167 * Rule-based format defined by pattern |
| 168 * @stable ICU 3.0 |
| 169 */ |
| 170 UNUM_PATTERN_RULEBASED, |
| 171 /** Default format */ |
| 172 UNUM_DEFAULT = UNUM_DECIMAL, |
| 173 /** (Alias for UNUM_PATTERN_DECIMAL) */ |
| 174 UNUM_IGNORE = UNUM_PATTERN_DECIMAL |
| 175 } UNumberFormatStyle; |
| 176 |
| 177 /** The possible number format rounding modes. |
| 178 * @stable ICU 2.0 |
| 179 */ |
| 180 typedef enum UNumberFormatRoundingMode { |
| 181 UNUM_ROUND_CEILING, |
| 182 UNUM_ROUND_FLOOR, |
| 183 UNUM_ROUND_DOWN, |
| 184 UNUM_ROUND_UP, |
| 185 /** |
| 186 * Half-even rounding, misspelled name |
| 187 * @deprecated, ICU 3.8 |
| 188 */ |
| 189 UNUM_FOUND_HALFEVEN, |
| 190 UNUM_ROUND_HALFDOWN, |
| 191 UNUM_ROUND_HALFUP, |
| 192 /** |
| 193 * Half-even rounding |
| 194 * @stable, ICU 3.8 |
| 195 */ |
| 196 UNUM_ROUND_HALFEVEN = UNUM_FOUND_HALFEVEN |
| 197 } UNumberFormatRoundingMode; |
| 198 |
| 199 /** The possible number format pad positions. |
| 200 * @stable ICU 2.0 |
| 201 */ |
| 202 typedef enum UNumberFormatPadPosition { |
| 203 UNUM_PAD_BEFORE_PREFIX, |
| 204 UNUM_PAD_AFTER_PREFIX, |
| 205 UNUM_PAD_BEFORE_SUFFIX, |
| 206 UNUM_PAD_AFTER_SUFFIX |
| 207 } UNumberFormatPadPosition; |
| 208 |
| 209 /** |
| 210 * Create and return a new UNumberFormat for formatting and parsing |
| 211 * numbers. A UNumberFormat may be used to format numbers by calling |
| 212 * {@link #unum_format }, and to parse numbers by calling {@link #unum_parse }. |
| 213 * The caller must call {@link #unum_close } when done to release resources |
| 214 * used by this object. |
| 215 * @param style The type of number format to open: one of |
| 216 * UNUM_DECIMAL, UNUM_CURRENCY, UNUM_PERCENT, UNUM_SCIENTIFIC, UNUM_SPELLOUT, |
| 217 * UNUM_PATTERN_DECIMAL, UNUM_PATTERN_RULEBASED, or UNUM_DEFAULT. |
| 218 * If UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED is passed then the |
| 219 * number format is opened using the given pattern, which must conform |
| 220 * to the syntax described in DecimalFormat or RuleBasedNumberFormat, |
| 221 * respectively. |
| 222 * @param pattern A pattern specifying the format to use. |
| 223 * This parameter is ignored unless the style is |
| 224 * UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED. |
| 225 * @param patternLength The number of characters in the pattern, or -1 |
| 226 * if null-terminated. This parameter is ignored unless the style is |
| 227 * UNUM_PATTERN. |
| 228 * @param locale A locale identifier to use to determine formatting |
| 229 * and parsing conventions, or NULL to use the default locale. |
| 230 * @param parseErr A pointer to a UParseError struct to receive the |
| 231 * details of any parsing errors, or NULL if no parsing error details |
| 232 * are desired. |
| 233 * @param status A pointer to an input-output UErrorCode. |
| 234 * @return A pointer to a newly created UNumberFormat, or NULL if an |
| 235 * error occurred. |
| 236 * @see unum_close |
| 237 * @see DecimalFormat |
| 238 * @stable ICU 2.0 |
| 239 */ |
| 240 U_STABLE UNumberFormat* U_EXPORT2 |
| 241 unum_open( UNumberFormatStyle style, |
| 242 const UChar* pattern, |
| 243 int32_t patternLength, |
| 244 const char* locale, |
| 245 UParseError* parseErr, |
| 246 UErrorCode* status); |
| 247 |
| 248 |
| 249 /** |
| 250 * Close a UNumberFormat. |
| 251 * Once closed, a UNumberFormat may no longer be used. |
| 252 * @param fmt The formatter to close. |
| 253 * @stable ICU 2.0 |
| 254 */ |
| 255 U_STABLE void U_EXPORT2 |
| 256 unum_close(UNumberFormat* fmt); |
| 257 |
| 258 #if U_SHOW_CPLUSPLUS_API |
| 259 |
| 260 U_NAMESPACE_BEGIN |
| 261 |
| 262 /** |
| 263 * \class LocalUNumberFormatPointer |
| 264 * "Smart pointer" class, closes a UNumberFormat via unum_close(). |
| 265 * For most methods see the LocalPointerBase base class. |
| 266 * |
| 267 * @see LocalPointerBase |
| 268 * @see LocalPointer |
| 269 * @stable ICU 4.4 |
| 270 */ |
| 271 U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberFormatPointer, UNumberFormat, unum_close
); |
| 272 |
| 273 U_NAMESPACE_END |
| 274 |
| 275 #endif |
| 276 |
| 277 /** |
| 278 * Open a copy of a UNumberFormat. |
| 279 * This function performs a deep copy. |
| 280 * @param fmt The format to copy |
| 281 * @param status A pointer to an UErrorCode to receive any errors. |
| 282 * @return A pointer to a UNumberFormat identical to fmt. |
| 283 * @stable ICU 2.0 |
| 284 */ |
| 285 U_STABLE UNumberFormat* U_EXPORT2 |
| 286 unum_clone(const UNumberFormat *fmt, |
| 287 UErrorCode *status); |
| 288 |
| 289 /** |
| 290 * Format an integer using a UNumberFormat. |
| 291 * The integer will be formatted according to the UNumberFormat's locale. |
| 292 * @param fmt The formatter to use. |
| 293 * @param number The number to format. |
| 294 * @param result A pointer to a buffer to receive the formatted number. |
| 295 * @param resultLength The maximum size of result. |
| 296 * @param pos A pointer to a UFieldPosition. On input, position->field |
| 297 * is read. On output, position->beginIndex and position->endIndex indicate |
| 298 * the beginning and ending indices of field number position->field, if such |
| 299 * a field exists. This parameter may be NULL, in which case no field |
| 300 * @param status A pointer to an UErrorCode to receive any errors |
| 301 * @return The total buffer size needed; if greater than resultLength, the output
was truncated. |
| 302 * @see unum_formatInt64 |
| 303 * @see unum_formatDouble |
| 304 * @see unum_parse |
| 305 * @see unum_parseInt64 |
| 306 * @see unum_parseDouble |
| 307 * @see UFieldPosition |
| 308 * @stable ICU 2.0 |
| 309 */ |
| 310 U_STABLE int32_t U_EXPORT2 |
| 311 unum_format( const UNumberFormat* fmt, |
| 312 int32_t number, |
| 313 UChar* result, |
| 314 int32_t resultLength, |
| 315 UFieldPosition *pos, |
| 316 UErrorCode* status); |
| 317 |
| 318 /** |
| 319 * Format an int64 using a UNumberFormat. |
| 320 * The int64 will be formatted according to the UNumberFormat's locale. |
| 321 * @param fmt The formatter to use. |
| 322 * @param number The number to format. |
| 323 * @param result A pointer to a buffer to receive the formatted number. |
| 324 * @param resultLength The maximum size of result. |
| 325 * @param pos A pointer to a UFieldPosition. On input, position->field |
| 326 * is read. On output, position->beginIndex and position->endIndex indicate |
| 327 * the beginning and ending indices of field number position->field, if such |
| 328 * a field exists. This parameter may be NULL, in which case no field |
| 329 * @param status A pointer to an UErrorCode to receive any errors |
| 330 * @return The total buffer size needed; if greater than resultLength, the output
was truncated. |
| 331 * @see unum_format |
| 332 * @see unum_formatDouble |
| 333 * @see unum_parse |
| 334 * @see unum_parseInt64 |
| 335 * @see unum_parseDouble |
| 336 * @see UFieldPosition |
| 337 * @stable ICU 2.0 |
| 338 */ |
| 339 U_STABLE int32_t U_EXPORT2 |
| 340 unum_formatInt64(const UNumberFormat *fmt, |
| 341 int64_t number, |
| 342 UChar* result, |
| 343 int32_t resultLength, |
| 344 UFieldPosition *pos, |
| 345 UErrorCode* status); |
| 346 |
| 347 /** |
| 348 * Format a double using a UNumberFormat. |
| 349 * The double will be formatted according to the UNumberFormat's locale. |
| 350 * @param fmt The formatter to use. |
| 351 * @param number The number to format. |
| 352 * @param result A pointer to a buffer to receive the formatted number. |
| 353 * @param resultLength The maximum size of result. |
| 354 * @param pos A pointer to a UFieldPosition. On input, position->field |
| 355 * is read. On output, position->beginIndex and position->endIndex indicate |
| 356 * the beginning and ending indices of field number position->field, if such |
| 357 * a field exists. This parameter may be NULL, in which case no field |
| 358 * @param status A pointer to an UErrorCode to receive any errors |
| 359 * @return The total buffer size needed; if greater than resultLength, the output
was truncated. |
| 360 * @see unum_format |
| 361 * @see unum_formatInt64 |
| 362 * @see unum_parse |
| 363 * @see unum_parseInt64 |
| 364 * @see unum_parseDouble |
| 365 * @see UFieldPosition |
| 366 * @stable ICU 2.0 |
| 367 */ |
| 368 U_STABLE int32_t U_EXPORT2 |
| 369 unum_formatDouble( const UNumberFormat* fmt, |
| 370 double number, |
| 371 UChar* result, |
| 372 int32_t resultLength, |
| 373 UFieldPosition *pos, /* 0 if ignore */ |
| 374 UErrorCode* status); |
| 375 |
| 376 /** |
| 377 * Format a decimal number using a UNumberFormat. |
| 378 * The number will be formatted according to the UNumberFormat's locale. |
| 379 * The syntax of the input number is a "numeric string" |
| 380 * as defined in the Decimal Arithmetic Specification, available at |
| 381 * http://speleotrove.com/decimal |
| 382 * @param fmt The formatter to use. |
| 383 * @param number The number to format. |
| 384 * @param length The length of the input number, or -1 if the input is nul-termin
ated. |
| 385 * @param result A pointer to a buffer to receive the formatted number. |
| 386 * @param resultLength The maximum size of result. |
| 387 * @param pos A pointer to a UFieldPosition. On input, position->field |
| 388 * is read. On output, position->beginIndex and position->endIndex
indicate |
| 389 * the beginning and ending indices of field number position->field
, if such |
| 390 * a field exists. This parameter may be NULL, in which case it is
ignored. |
| 391 * @param status A pointer to an UErrorCode to receive any errors |
| 392 * @return The total buffer size needed; if greater than resultLength, the output
was truncated. |
| 393 * @see unum_format |
| 394 * @see unum_formatInt64 |
| 395 * @see unum_parse |
| 396 * @see unum_parseInt64 |
| 397 * @see unum_parseDouble |
| 398 * @see UFieldPosition |
| 399 * @stable ICU 4.4 |
| 400 */ |
| 401 U_STABLE int32_t U_EXPORT2 |
| 402 unum_formatDecimal( const UNumberFormat* fmt, |
| 403 const char * number, |
| 404 int32_t length, |
| 405 UChar* result, |
| 406 int32_t resultLength, |
| 407 UFieldPosition *pos, /* 0 if ignore */ |
| 408 UErrorCode* status); |
| 409 |
| 410 /** |
| 411 * Format a double currency amount using a UNumberFormat. |
| 412 * The double will be formatted according to the UNumberFormat's locale. |
| 413 * @param fmt the formatter to use |
| 414 * @param number the number to format |
| 415 * @param currency the 3-letter null-terminated ISO 4217 currency code |
| 416 * @param result a pointer to the buffer to receive the formatted number |
| 417 * @param resultLength the maximum number of UChars to write to result |
| 418 * @param pos a pointer to a UFieldPosition. On input, |
| 419 * position->field is read. On output, position->beginIndex and |
| 420 * position->endIndex indicate the beginning and ending indices of |
| 421 * field number position->field, if such a field exists. This |
| 422 * parameter may be NULL, in which case it is ignored. |
| 423 * @param status a pointer to an input-output UErrorCode |
| 424 * @return the total buffer size needed; if greater than resultLength, |
| 425 * the output was truncated. |
| 426 * @see unum_formatDouble |
| 427 * @see unum_parseDoubleCurrency |
| 428 * @see UFieldPosition |
| 429 * @stable ICU 3.0 |
| 430 */ |
| 431 U_STABLE int32_t U_EXPORT2 |
| 432 unum_formatDoubleCurrency(const UNumberFormat* fmt, |
| 433 double number, |
| 434 UChar* currency, |
| 435 UChar* result, |
| 436 int32_t resultLength, |
| 437 UFieldPosition* pos, /* ignored if 0 */ |
| 438 UErrorCode* status); |
| 439 |
| 440 /** |
| 441 * Parse a string into an integer using a UNumberFormat. |
| 442 * The string will be parsed according to the UNumberFormat's locale. |
| 443 * @param fmt The formatter to use. |
| 444 * @param text The text to parse. |
| 445 * @param textLength The length of text, or -1 if null-terminated. |
| 446 * @param parsePos If not 0, on input a pointer to an integer specifying the offs
et at which |
| 447 * to begin parsing. If not 0, on output the offset at which parsing ended. |
| 448 * @param status A pointer to an UErrorCode to receive any errors |
| 449 * @return The value of the parsed integer |
| 450 * @see unum_parseInt64 |
| 451 * @see unum_parseDouble |
| 452 * @see unum_format |
| 453 * @see unum_formatInt64 |
| 454 * @see unum_formatDouble |
| 455 * @stable ICU 2.0 |
| 456 */ |
| 457 U_STABLE int32_t U_EXPORT2 |
| 458 unum_parse( const UNumberFormat* fmt, |
| 459 const UChar* text, |
| 460 int32_t textLength, |
| 461 int32_t *parsePos /* 0 = start */, |
| 462 UErrorCode *status); |
| 463 |
| 464 /** |
| 465 * Parse a string into an int64 using a UNumberFormat. |
| 466 * The string will be parsed according to the UNumberFormat's locale. |
| 467 * @param fmt The formatter to use. |
| 468 * @param text The text to parse. |
| 469 * @param textLength The length of text, or -1 if null-terminated. |
| 470 * @param parsePos If not 0, on input a pointer to an integer specifying the offs
et at which |
| 471 * to begin parsing. If not 0, on output the offset at which parsing ended. |
| 472 * @param status A pointer to an UErrorCode to receive any errors |
| 473 * @return The value of the parsed integer |
| 474 * @see unum_parse |
| 475 * @see unum_parseDouble |
| 476 * @see unum_format |
| 477 * @see unum_formatInt64 |
| 478 * @see unum_formatDouble |
| 479 * @stable ICU 2.8 |
| 480 */ |
| 481 U_STABLE int64_t U_EXPORT2 |
| 482 unum_parseInt64(const UNumberFormat* fmt, |
| 483 const UChar* text, |
| 484 int32_t textLength, |
| 485 int32_t *parsePos /* 0 = start */, |
| 486 UErrorCode *status); |
| 487 |
| 488 /** |
| 489 * Parse a string into a double using a UNumberFormat. |
| 490 * The string will be parsed according to the UNumberFormat's locale. |
| 491 * @param fmt The formatter to use. |
| 492 * @param text The text to parse. |
| 493 * @param textLength The length of text, or -1 if null-terminated. |
| 494 * @param parsePos If not 0, on input a pointer to an integer specifying the offs
et at which |
| 495 * to begin parsing. If not 0, on output the offset at which parsing ended. |
| 496 * @param status A pointer to an UErrorCode to receive any errors |
| 497 * @return The value of the parsed double |
| 498 * @see unum_parse |
| 499 * @see unum_parseInt64 |
| 500 * @see unum_format |
| 501 * @see unum_formatInt64 |
| 502 * @see unum_formatDouble |
| 503 * @stable ICU 2.0 |
| 504 */ |
| 505 U_STABLE double U_EXPORT2 |
| 506 unum_parseDouble( const UNumberFormat* fmt, |
| 507 const UChar* text, |
| 508 int32_t textLength, |
| 509 int32_t *parsePos /* 0 = start */, |
| 510 UErrorCode *status); |
| 511 |
| 512 |
| 513 /** |
| 514 * Parse a number from a string into an unformatted numeric string using a UNumbe
rFormat. |
| 515 * The input string will be parsed according to the UNumberFormat's locale. |
| 516 * The syntax of the output is a "numeric string" |
| 517 * as defined in the Decimal Arithmetic Specification, available at |
| 518 * http://speleotrove.com/decimal |
| 519 * @param fmt The formatter to use. |
| 520 * @param text The text to parse. |
| 521 * @param textLength The length of text, or -1 if null-terminated. |
| 522 * @param parsePos If not 0, on input a pointer to an integer specifying the offs
et at which |
| 523 * to begin parsing. If not 0, on output the offset at which par
sing ended. |
| 524 * @param outBuf A (char *) buffer to receive the parsed number as a string. The
output string |
| 525 * will be nul-terminated if there is sufficient space. |
| 526 * @param outBufLength The size of the output buffer. May be zero, in which case |
| 527 * the outBuf pointer may be NULL, and the function will return the |
| 528 * size of the output string. |
| 529 * @param status A pointer to an UErrorCode to receive any errors |
| 530 * @return the length of the output string, not including any terminating nul. |
| 531 * @see unum_parse |
| 532 * @see unum_parseInt64 |
| 533 * @see unum_format |
| 534 * @see unum_formatInt64 |
| 535 * @see unum_formatDouble |
| 536 * @stable ICU 4.4 |
| 537 */ |
| 538 U_STABLE int32_t U_EXPORT2 |
| 539 unum_parseDecimal(const UNumberFormat* fmt, |
| 540 const UChar* text, |
| 541 int32_t textLength, |
| 542 int32_t *parsePos /* 0 = start */, |
| 543 char *outBuf, |
| 544 int32_t outBufLength, |
| 545 UErrorCode *status); |
| 546 |
| 547 /** |
| 548 * Parse a string into a double and a currency using a UNumberFormat. |
| 549 * The string will be parsed according to the UNumberFormat's locale. |
| 550 * @param fmt the formatter to use |
| 551 * @param text the text to parse |
| 552 * @param textLength the length of text, or -1 if null-terminated |
| 553 * @param parsePos a pointer to an offset index into text at which to |
| 554 * begin parsing. On output, *parsePos will point after the last |
| 555 * parsed character. This parameter may be 0, in which case parsing |
| 556 * begins at offset 0. |
| 557 * @param currency a pointer to the buffer to receive the parsed null- |
| 558 * terminated currency. This buffer must have a capacity of at least |
| 559 * 4 UChars. |
| 560 * @param status a pointer to an input-output UErrorCode |
| 561 * @return the parsed double |
| 562 * @see unum_parseDouble |
| 563 * @see unum_formatDoubleCurrency |
| 564 * @stable ICU 3.0 |
| 565 */ |
| 566 U_STABLE double U_EXPORT2 |
| 567 unum_parseDoubleCurrency(const UNumberFormat* fmt, |
| 568 const UChar* text, |
| 569 int32_t textLength, |
| 570 int32_t* parsePos, /* 0 = start */ |
| 571 UChar* currency, |
| 572 UErrorCode* status); |
| 573 |
| 574 /** |
| 575 * Set the pattern used by a UNumberFormat. This can only be used |
| 576 * on a DecimalFormat, other formats return U_ILLEGAL_ARGUMENT_ERROR |
| 577 * in the status. |
| 578 * @param format The formatter to set. |
| 579 * @param localized TRUE if the pattern is localized, FALSE otherwise. |
| 580 * @param pattern The new pattern |
| 581 * @param patternLength The length of pattern, or -1 if null-terminated. |
| 582 * @param parseError A pointer to UParseError to recieve information |
| 583 * about errors occurred during parsing, or NULL if no parse error |
| 584 * information is desired. |
| 585 * @param status A pointer to an input-output UErrorCode. |
| 586 * @see unum_toPattern |
| 587 * @see DecimalFormat |
| 588 * @stable ICU 2.0 |
| 589 */ |
| 590 U_STABLE void U_EXPORT2 |
| 591 unum_applyPattern( UNumberFormat *format, |
| 592 UBool localized, |
| 593 const UChar *pattern, |
| 594 int32_t patternLength, |
| 595 UParseError *parseError, |
| 596 UErrorCode *status |
| 597 ); |
| 598 |
| 599 /** |
| 600 * Get a locale for which decimal formatting patterns are available. |
| 601 * A UNumberFormat in a locale returned by this function will perform the correct |
| 602 * formatting and parsing for the locale. The results of this call are not |
| 603 * valid for rule-based number formats. |
| 604 * @param localeIndex The index of the desired locale. |
| 605 * @return A locale for which number formatting patterns are available, or 0 if n
one. |
| 606 * @see unum_countAvailable |
| 607 * @stable ICU 2.0 |
| 608 */ |
| 609 U_STABLE const char* U_EXPORT2 |
| 610 unum_getAvailable(int32_t localeIndex); |
| 611 |
| 612 /** |
| 613 * Determine how many locales have decimal formatting patterns available. The |
| 614 * results of this call are not valid for rule-based number formats. |
| 615 * This function is useful for determining the loop ending condition for |
| 616 * calls to {@link #unum_getAvailable }. |
| 617 * @return The number of locales for which decimal formatting patterns are availa
ble. |
| 618 * @see unum_getAvailable |
| 619 * @stable ICU 2.0 |
| 620 */ |
| 621 U_STABLE int32_t U_EXPORT2 |
| 622 unum_countAvailable(void); |
| 623 |
| 624 /** The possible UNumberFormat numeric attributes @stable ICU 2.0 */ |
| 625 typedef enum UNumberFormatAttribute { |
| 626 /** Parse integers only */ |
| 627 UNUM_PARSE_INT_ONLY, |
| 628 /** Use grouping separator */ |
| 629 UNUM_GROUPING_USED, |
| 630 /** Always show decimal point */ |
| 631 UNUM_DECIMAL_ALWAYS_SHOWN, |
| 632 /** Maximum integer digits */ |
| 633 UNUM_MAX_INTEGER_DIGITS, |
| 634 /** Minimum integer digits */ |
| 635 UNUM_MIN_INTEGER_DIGITS, |
| 636 /** Integer digits */ |
| 637 UNUM_INTEGER_DIGITS, |
| 638 /** Maximum fraction digits */ |
| 639 UNUM_MAX_FRACTION_DIGITS, |
| 640 /** Minimum fraction digits */ |
| 641 UNUM_MIN_FRACTION_DIGITS, |
| 642 /** Fraction digits */ |
| 643 UNUM_FRACTION_DIGITS, |
| 644 /** Multiplier */ |
| 645 UNUM_MULTIPLIER, |
| 646 /** Grouping size */ |
| 647 UNUM_GROUPING_SIZE, |
| 648 /** Rounding Mode */ |
| 649 UNUM_ROUNDING_MODE, |
| 650 /** Rounding increment */ |
| 651 UNUM_ROUNDING_INCREMENT, |
| 652 /** The width to which the output of <code>format()</code> is padded. */ |
| 653 UNUM_FORMAT_WIDTH, |
| 654 /** The position at which padding will take place. */ |
| 655 UNUM_PADDING_POSITION, |
| 656 /** Secondary grouping size */ |
| 657 UNUM_SECONDARY_GROUPING_SIZE, |
| 658 /** Use significant digits |
| 659 * @stable ICU 3.0 */ |
| 660 UNUM_SIGNIFICANT_DIGITS_USED, |
| 661 /** Minimum significant digits |
| 662 * @stable ICU 3.0 */ |
| 663 UNUM_MIN_SIGNIFICANT_DIGITS, |
| 664 /** Maximum significant digits |
| 665 * @stable ICU 3.0 */ |
| 666 UNUM_MAX_SIGNIFICANT_DIGITS, |
| 667 /** Lenient parse mode used by rule-based formats. |
| 668 * @stable ICU 3.0 |
| 669 */ |
| 670 UNUM_LENIENT_PARSE |
| 671 } UNumberFormatAttribute; |
| 672 |
| 673 /** |
| 674 * Get a numeric attribute associated with a UNumberFormat. |
| 675 * An example of a numeric attribute is the number of integer digits a formatter
will produce. |
| 676 * @param fmt The formatter to query. |
| 677 * @param attr The attribute to query; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_
USED, |
| 678 * UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, U
NUM_INTEGER_DIGITS, |
| 679 * UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM
_MULTIPLIER, |
| 680 * UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITI
ON, UNUM_SECONDARY_GROUPING_SIZE. |
| 681 * @return The value of attr. |
| 682 * @see unum_setAttribute |
| 683 * @see unum_getDoubleAttribute |
| 684 * @see unum_setDoubleAttribute |
| 685 * @see unum_getTextAttribute |
| 686 * @see unum_setTextAttribute |
| 687 * @stable ICU 2.0 |
| 688 */ |
| 689 U_STABLE int32_t U_EXPORT2 |
| 690 unum_getAttribute(const UNumberFormat* fmt, |
| 691 UNumberFormatAttribute attr); |
| 692 |
| 693 /** |
| 694 * Set a numeric attribute associated with a UNumberFormat. |
| 695 * An example of a numeric attribute is the number of integer digits a formatter
will produce. If the |
| 696 * formatter does not understand the attribute, the call is ignored. Rule-based
formatters only understand |
| 697 * the lenient-parse attribute. |
| 698 * @param fmt The formatter to set. |
| 699 * @param attr The attribute to set; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_US
ED, |
| 700 * UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, U
NUM_INTEGER_DIGITS, |
| 701 * UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM
_MULTIPLIER, |
| 702 * UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITI
ON, UNUM_SECONDARY_GROUPING_SIZE, |
| 703 * or UNUM_LENIENT_PARSE. |
| 704 * @param newValue The new value of attr. |
| 705 * @see unum_getAttribute |
| 706 * @see unum_getDoubleAttribute |
| 707 * @see unum_setDoubleAttribute |
| 708 * @see unum_getTextAttribute |
| 709 * @see unum_setTextAttribute |
| 710 * @stable ICU 2.0 |
| 711 */ |
| 712 U_STABLE void U_EXPORT2 |
| 713 unum_setAttribute( UNumberFormat* fmt, |
| 714 UNumberFormatAttribute attr, |
| 715 int32_t newValue); |
| 716 |
| 717 |
| 718 /** |
| 719 * Get a numeric attribute associated with a UNumberFormat. |
| 720 * An example of a numeric attribute is the number of integer digits a formatter
will produce. |
| 721 * If the formatter does not understand the attribute, -1 is returned. |
| 722 * @param fmt The formatter to query. |
| 723 * @param attr The attribute to query; e.g. UNUM_ROUNDING_INCREMENT. |
| 724 * @return The value of attr. |
| 725 * @see unum_getAttribute |
| 726 * @see unum_setAttribute |
| 727 * @see unum_setDoubleAttribute |
| 728 * @see unum_getTextAttribute |
| 729 * @see unum_setTextAttribute |
| 730 * @stable ICU 2.0 |
| 731 */ |
| 732 U_STABLE double U_EXPORT2 |
| 733 unum_getDoubleAttribute(const UNumberFormat* fmt, |
| 734 UNumberFormatAttribute attr); |
| 735 |
| 736 /** |
| 737 * Set a numeric attribute associated with a UNumberFormat. |
| 738 * An example of a numeric attribute is the number of integer digits a formatter
will produce. |
| 739 * If the formatter does not understand the attribute, this call is ignored. |
| 740 * @param fmt The formatter to set. |
| 741 * @param attr The attribute to set; e.g. UNUM_ROUNDING_INCREMENT. |
| 742 * @param newValue The new value of attr. |
| 743 * @see unum_getAttribute |
| 744 * @see unum_setAttribute |
| 745 * @see unum_getDoubleAttribute |
| 746 * @see unum_getTextAttribute |
| 747 * @see unum_setTextAttribute |
| 748 * @stable ICU 2.0 |
| 749 */ |
| 750 U_STABLE void U_EXPORT2 |
| 751 unum_setDoubleAttribute( UNumberFormat* fmt, |
| 752 UNumberFormatAttribute attr, |
| 753 double newValue); |
| 754 |
| 755 /** The possible UNumberFormat text attributes @stable ICU 2.0*/ |
| 756 typedef enum UNumberFormatTextAttribute { |
| 757 /** Positive prefix */ |
| 758 UNUM_POSITIVE_PREFIX, |
| 759 /** Positive suffix */ |
| 760 UNUM_POSITIVE_SUFFIX, |
| 761 /** Negative prefix */ |
| 762 UNUM_NEGATIVE_PREFIX, |
| 763 /** Negative suffix */ |
| 764 UNUM_NEGATIVE_SUFFIX, |
| 765 /** The character used to pad to the format width. */ |
| 766 UNUM_PADDING_CHARACTER, |
| 767 /** The ISO currency code */ |
| 768 UNUM_CURRENCY_CODE, |
| 769 /** |
| 770 * The default rule set. This is only available with rule-based formatters. |
| 771 * @stable ICU 3.0 |
| 772 */ |
| 773 UNUM_DEFAULT_RULESET, |
| 774 /** |
| 775 * The public rule sets. This is only available with rule-based formatters. |
| 776 * This is a read-only attribute. The public rulesets are returned as a |
| 777 * single string, with each ruleset name delimited by ';' (semicolon). |
| 778 * @stable ICU 3.0 |
| 779 */ |
| 780 UNUM_PUBLIC_RULESETS |
| 781 } UNumberFormatTextAttribute; |
| 782 |
| 783 /** |
| 784 * Get a text attribute associated with a UNumberFormat. |
| 785 * An example of a text attribute is the suffix for positive numbers. If the for
matter |
| 786 * does not understand the attributre, U_UNSUPPORTED_ERROR is returned as the sta
tus. |
| 787 * Rule-based formatters only understand UNUM_DEFAULT_RULESET and UNUM_PUBLIC_RUL
ESETS. |
| 788 * @param fmt The formatter to query. |
| 789 * @param tag The attribute to query; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_
SUFFIX, |
| 790 * UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRE
NCY_CODE, |
| 791 * UNUM_DEFAULT_RULESET, or UNUM_PUBLIC_RULESETS. |
| 792 * @param result A pointer to a buffer to receive the attribute. |
| 793 * @param resultLength The maximum size of result. |
| 794 * @param status A pointer to an UErrorCode to receive any errors |
| 795 * @return The total buffer size needed; if greater than resultLength, the output
was truncated. |
| 796 * @see unum_setTextAttribute |
| 797 * @see unum_getAttribute |
| 798 * @see unum_setAttribute |
| 799 * @stable ICU 2.0 |
| 800 */ |
| 801 U_STABLE int32_t U_EXPORT2 |
| 802 unum_getTextAttribute( const UNumberFormat* fmt, |
| 803 UNumberFormatTextAttribute tag, |
| 804 UChar* result, |
| 805 int32_t resultLength, |
| 806 UErrorCode* status); |
| 807 |
| 808 /** |
| 809 * Set a text attribute associated with a UNumberFormat. |
| 810 * An example of a text attribute is the suffix for positive numbers. Rule-based
formatters |
| 811 * only understand UNUM_DEFAULT_RULESET. |
| 812 * @param fmt The formatter to set. |
| 813 * @param tag The attribute to set; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SU
FFIX, |
| 814 * UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRE
NCY_CODE, |
| 815 * or UNUM_DEFAULT_RULESET. |
| 816 * @param newValue The new value of attr. |
| 817 * @param newValueLength The length of newValue, or -1 if null-terminated. |
| 818 * @param status A pointer to an UErrorCode to receive any errors |
| 819 * @see unum_getTextAttribute |
| 820 * @see unum_getAttribute |
| 821 * @see unum_setAttribute |
| 822 * @stable ICU 2.0 |
| 823 */ |
| 824 U_STABLE void U_EXPORT2 |
| 825 unum_setTextAttribute( UNumberFormat* fmt, |
| 826 UNumberFormatTextAttribute tag, |
| 827 const UChar* newValue, |
| 828 int32_t newValueLength, |
| 829 UErrorCode *status); |
| 830 |
| 831 /** |
| 832 * Extract the pattern from a UNumberFormat. The pattern will follow |
| 833 * the DecimalFormat pattern syntax. |
| 834 * @param fmt The formatter to query. |
| 835 * @param isPatternLocalized TRUE if the pattern should be localized, |
| 836 * FALSE otherwise. This is ignored if the formatter is a rule-based |
| 837 * formatter. |
| 838 * @param result A pointer to a buffer to receive the pattern. |
| 839 * @param resultLength The maximum size of result. |
| 840 * @param status A pointer to an input-output UErrorCode. |
| 841 * @return The total buffer size needed; if greater than resultLength, |
| 842 * the output was truncated. |
| 843 * @see unum_applyPattern |
| 844 * @see DecimalFormat |
| 845 * @stable ICU 2.0 |
| 846 */ |
| 847 U_STABLE int32_t U_EXPORT2 |
| 848 unum_toPattern( const UNumberFormat* fmt, |
| 849 UBool isPatternLocalized, |
| 850 UChar* result, |
| 851 int32_t resultLength, |
| 852 UErrorCode* status); |
| 853 |
| 854 |
| 855 /** |
| 856 * Constants for specifying a number format symbol. |
| 857 * @stable ICU 2.0 |
| 858 */ |
| 859 typedef enum UNumberFormatSymbol { |
| 860 /** The decimal separator */ |
| 861 UNUM_DECIMAL_SEPARATOR_SYMBOL = 0, |
| 862 /** The grouping separator */ |
| 863 UNUM_GROUPING_SEPARATOR_SYMBOL = 1, |
| 864 /** The pattern separator */ |
| 865 UNUM_PATTERN_SEPARATOR_SYMBOL = 2, |
| 866 /** The percent sign */ |
| 867 UNUM_PERCENT_SYMBOL = 3, |
| 868 /** Zero*/ |
| 869 UNUM_ZERO_DIGIT_SYMBOL = 4, |
| 870 /** Character representing a digit in the pattern */ |
| 871 UNUM_DIGIT_SYMBOL = 5, |
| 872 /** The minus sign */ |
| 873 UNUM_MINUS_SIGN_SYMBOL = 6, |
| 874 /** The plus sign */ |
| 875 UNUM_PLUS_SIGN_SYMBOL = 7, |
| 876 /** The currency symbol */ |
| 877 UNUM_CURRENCY_SYMBOL = 8, |
| 878 /** The international currency symbol */ |
| 879 UNUM_INTL_CURRENCY_SYMBOL = 9, |
| 880 /** The monetary separator */ |
| 881 UNUM_MONETARY_SEPARATOR_SYMBOL = 10, |
| 882 /** The exponential symbol */ |
| 883 UNUM_EXPONENTIAL_SYMBOL = 11, |
| 884 /** Per mill symbol */ |
| 885 UNUM_PERMILL_SYMBOL = 12, |
| 886 /** Escape padding character */ |
| 887 UNUM_PAD_ESCAPE_SYMBOL = 13, |
| 888 /** Infinity symbol */ |
| 889 UNUM_INFINITY_SYMBOL = 14, |
| 890 /** Nan symbol */ |
| 891 UNUM_NAN_SYMBOL = 15, |
| 892 /** Significant digit symbol |
| 893 * @stable ICU 3.0 */ |
| 894 UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16, |
| 895 /** The monetary grouping separator |
| 896 * @stable ICU 3.6 |
| 897 */ |
| 898 UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17, |
| 899 /** One |
| 900 * @draft ICU 4.6 |
| 901 */ |
| 902 UNUM_ONE_DIGIT_SYMBOL = 18, |
| 903 /** Two |
| 904 * @draft ICU 4.6 |
| 905 */ |
| 906 UNUM_TWO_DIGIT_SYMBOL = 19, |
| 907 /** Three |
| 908 * @draft ICU 4.6 |
| 909 */ |
| 910 UNUM_THREE_DIGIT_SYMBOL = 20, |
| 911 /** Four |
| 912 * @draft ICU 4.6 |
| 913 */ |
| 914 UNUM_FOUR_DIGIT_SYMBOL = 21, |
| 915 /** Five |
| 916 * @draft ICU 4.6 |
| 917 */ |
| 918 UNUM_FIVE_DIGIT_SYMBOL = 22, |
| 919 /** Six |
| 920 * @draft ICU 4.6 |
| 921 */ |
| 922 UNUM_SIX_DIGIT_SYMBOL = 23, |
| 923 /** Seven |
| 924 * @draft ICU 4.6 |
| 925 */ |
| 926 UNUM_SEVEN_DIGIT_SYMBOL = 24, |
| 927 /** Eight |
| 928 * @draft ICU 4.6 |
| 929 */ |
| 930 UNUM_EIGHT_DIGIT_SYMBOL = 25, |
| 931 /** Nine |
| 932 * @draft ICU 4.6 |
| 933 */ |
| 934 UNUM_NINE_DIGIT_SYMBOL = 26, |
| 935 /** count symbol constants */ |
| 936 UNUM_FORMAT_SYMBOL_COUNT = 27 |
| 937 } UNumberFormatSymbol; |
| 938 |
| 939 /** |
| 940 * Get a symbol associated with a UNumberFormat. |
| 941 * A UNumberFormat uses symbols to represent the special locale-dependent |
| 942 * characters in a number, for example the percent sign. This API is not |
| 943 * supported for rule-based formatters. |
| 944 * @param fmt The formatter to query. |
| 945 * @param symbol The UNumberFormatSymbol constant for the symbol to get |
| 946 * @param buffer The string buffer that will receive the symbol string; |
| 947 * if it is NULL, then only the length of the symbol is returned |
| 948 * @param size The size of the string buffer |
| 949 * @param status A pointer to an UErrorCode to receive any errors |
| 950 * @return The length of the symbol; the buffer is not modified if |
| 951 * <code>length>=size</code> |
| 952 * @see unum_setSymbol |
| 953 * @stable ICU 2.0 |
| 954 */ |
| 955 U_STABLE int32_t U_EXPORT2 |
| 956 unum_getSymbol(const UNumberFormat *fmt, |
| 957 UNumberFormatSymbol symbol, |
| 958 UChar *buffer, |
| 959 int32_t size, |
| 960 UErrorCode *status); |
| 961 |
| 962 /** |
| 963 * Set a symbol associated with a UNumberFormat. |
| 964 * A UNumberFormat uses symbols to represent the special locale-dependent |
| 965 * characters in a number, for example the percent sign. This API is not |
| 966 * supported for rule-based formatters. |
| 967 * @param fmt The formatter to set. |
| 968 * @param symbol The UNumberFormatSymbol constant for the symbol to set |
| 969 * @param value The string to set the symbol to |
| 970 * @param length The length of the string, or -1 for a zero-terminated string |
| 971 * @param status A pointer to an UErrorCode to receive any errors. |
| 972 * @see unum_getSymbol |
| 973 * @stable ICU 2.0 |
| 974 */ |
| 975 U_STABLE void U_EXPORT2 |
| 976 unum_setSymbol(UNumberFormat *fmt, |
| 977 UNumberFormatSymbol symbol, |
| 978 const UChar *value, |
| 979 int32_t length, |
| 980 UErrorCode *status); |
| 981 |
| 982 |
| 983 /** |
| 984 * Get the locale for this number format object. |
| 985 * You can choose between valid and actual locale. |
| 986 * @param fmt The formatter to get the locale from |
| 987 * @param type type of the locale we're looking for (valid or actual) |
| 988 * @param status error code for the operation |
| 989 * @return the locale name |
| 990 * @stable ICU 2.8 |
| 991 */ |
| 992 U_STABLE const char* U_EXPORT2 |
| 993 unum_getLocaleByType(const UNumberFormat *fmt, |
| 994 ULocDataLocaleType type, |
| 995 UErrorCode* status); |
| 996 |
| 997 #endif /* #if !UCONFIG_NO_FORMATTING */ |
| 998 |
| 999 #endif |
OLD | NEW |