Logo Search packages:      
Sourcecode: icu version File versions

unum.h File Reference


Detailed Description

C API: NumberFormat.

Number Format C API

Number Format C API Provides functions for formatting and parsing a number. Also provides methods for determining which locales have number formats, and what their names are.

UNumberFormat helps you to format and parse numbers for any locale. Your code can be completely independent of the locale conventions for decimal points, thousands-separators, or even the particular decimal digits used, or whether the number format is even decimal. There are different number format styles like decimal, currency, percent and spellout.

To format a number for the current Locale, use one of the static factory methods:

 
    UChar myString[20];
    double myNumber = 7.0;
    UErrorCode success = U_ZERO_ERROR;
    UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, &success)
    unum_formatDouble(nf, myNumber, myString, u_strlen(myString), NULL, &status);
    printf(" Example 1: %s\n", austrdup(myString) ); //austrdup( a function used to convert UChar* to char*)
If you are formatting multiple numbers, it is more efficient to get the format and use it multiple times so that the system doesn't have to fetch the information about the local language and country conventions multiple times.
 
     UChar* myString;
     int32_t i, resultlength, reslenneeded;
     UErrorCode success = U_ZERO_ERROR;
     int32_t a[] = { 123, 3333, -1234567 };
     const int32_t a_len = sizeof(a) / sizeof(a[0]);
     UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, &success)
     for (i = 0; i < a_len; i++) {
     resultlength=0;
     reslenneeded=unum_format(nf, a[i], NULL, resultlength, NULL, &status);
     if(status==U_BUFFER_OVERFLOW_ERROR){
         status=U_ZERO_ERROR;
         resultlength=resultlengthneeded+1;
         result=(UChar*)malloc(sizeof(UChar) * resultlength);
         unum_format(nf, a[i], result, resultlength, NULL, &status);
     }
     printf(" Example 2: %s\n", austrdup(result) );
     free(result);
     }
To format a number for a different Locale, specify it in the call to unum_open().
 
     UNumberFormat* nf = unum_open(UNUM_DEFAULT, "fr_FR", &success)
You can use a NumberFormat API unum_parse() to parse.
 
    UErrorCode success;
    int32_t pos=0;
    unum_parse(nf, result, u_strlen(result), &pos, &success);
Use UCAL_DECIMAL to get the normal number format for that country. There are other static options available. Use UCAL_CURRENCY to get the currency number format for that country. Use UCAL_PERCENT to get a format for displaying percentages. With this format, a fraction from 0.53 is displayed as 53%.

You can also control the display of numbers with such function as unum_getAttribues() and unum_setAtributes(). where in you can set the miminum fraction digits, grouping used etc.

See also:
UNumberFormatAttributes for more details
You can also use forms of the parse and format methods with ParsePosition and UFieldPosition to allow you to:

It is also possible to change or set the symbols used for a particular locale like the currency symbol, the grouping seperator , monetary seperator etc by making use of functions unum_setSymbols() and unum_getSymbols().

Definition in file unum.h.

#include "unicode/utypes.h"
#include "unicode/umisc.h"
#include "unicode/parseerr.h"

Go to the source code of this file.

Defines

#define UNFSYMBOLSMAXSIZE   10

Typedefs

typedef void * UNumberFormat
typedef enum UNumberFormatAttribute UNumberFormatAttribute
typedef enum
UNumberFormatPadPosition 
UNumberFormatPadPosition
typedef enum
UNumberFormatRoundingMode 
UNumberFormatRoundingMode
typedef enum UNumberFormatStyle UNumberFormatStyle
typedef enum UNumberFormatSymbol UNumberFormatSymbol
typedef enum
UNumberFormatTextAttribute 
UNumberFormatTextAttribute

Enumerations

enum  UNumberFormatAttribute {
  UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED, UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS,
  UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS, UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS,
  UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER, UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE,
  UNUM_ROUNDING_INCREMENT, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE
}
enum  UNumberFormatPadPosition { UNUM_PAD_BEFORE_PREFIX, UNUM_PAD_AFTER_PREFIX, UNUM_PAD_BEFORE_SUFFIX, UNUM_PAD_AFTER_SUFFIX }
enum  UNumberFormatRoundingMode {
  UNUM_ROUND_CEILING, UNUM_ROUND_FLOOR, UNUM_ROUND_DOWN, UNUM_ROUND_UP,
  UNUM_FOUND_HALFEVEN, UNUM_ROUND_HALFDOWN, UNUM_ROUND_HALFUP
}
enum  UNumberFormatStyle {
  UNUM_IGNORE = 0, UNUM_DECIMAL = 1, UNUM_CURRENCY, UNUM_PERCENT,
  UNUM_SCIENTIFIC, UNUM_SPELLOUT, UNUM_DEFAULT = UNUM_DECIMAL
}
enum  UNumberFormatSymbol {
  UNUM_DECIMAL_SEPARATOR_SYMBOL, UNUM_GROUPING_SEPARATOR_SYMBOL, UNUM_PATTERN_SEPARATOR_SYMBOL, UNUM_PERCENT_SYMBOL,
  UNUM_ZERO_DIGIT_SYMBOL, UNUM_DIGIT_SYMBOL, UNUM_MINUS_SIGN_SYMBOL, UNUM_PLUS_SIGN_SYMBOL,
  UNUM_CURRENCY_SYMBOL, UNUM_INTL_CURRENCY_SYMBOL, UNUM_MONETARY_SEPARATOR_SYMBOL, UNUM_EXPONENTIAL_SYMBOL,
  UNUM_PERMILL_SYMBOL, UNUM_PAD_ESCAPE_SYMBOL, UNUM_INFINITY_SYMBOL, UNUM_NAN_SYMBOL,
  UNUM_FORMAT_SYMBOL_COUNT
}
enum  UNumberFormatTextAttribute {
  UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX, UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX,
  UNUM_PADDING_CHARACTER
}

Functions

U_CAPI void U_EXPORT2 unum_applyPattern (UNumberFormat *format, UBool localized, const UChar *pattern, int32_t patternLength, UParseError *parseError, UErrorCode *status)
U_CAPI UNumberFormat *U_EXPORT2 unum_clone (const UNumberFormat *fmt, UErrorCode *status)
U_CAPI void U_EXPORT2 unum_close (UNumberFormat *fmt)
U_CAPI int32_t U_EXPORT2 unum_countAvailable (void)
U_CAPI int32_t U_EXPORT2 unum_format (const UNumberFormat *fmt, int32_t number, UChar *result, int32_t resultLength, UFieldPosition *pos, UErrorCode *status)
U_CAPI int32_t U_EXPORT2 unum_formatDouble (const UNumberFormat *fmt, double number, UChar *result, int32_t resultLength, UFieldPosition *pos, UErrorCode *status)
U_CAPI int32_t U_EXPORT2 unum_getAttribute (const UNumberFormat *fmt, UNumberFormatAttribute attr)
U_CAPI const char *U_EXPORT2 unum_getAvailable (int32_t index)
U_CAPI double U_EXPORT2 unum_getDoubleAttribute (const UNumberFormat *fmt, UNumberFormatAttribute attr)
U_CAPI int32_t U_EXPORT2 unum_getSymbol (UNumberFormat *fmt, UNumberFormatSymbol symbol, UChar *buffer, int32_t size, UErrorCode *status)
U_CAPI int32_t U_EXPORT2 unum_getTextAttribute (const UNumberFormat *fmt, UNumberFormatTextAttribute tag, UChar *result, int32_t resultLength, UErrorCode *status)
U_CAPI UNumberFormat *U_EXPORT2 unum_open (UNumberFormatStyle style, const UChar *pattern, int32_t patternLength, const char *locale, UParseError *parseErr, UErrorCode *status)
U_CAPI int32_t U_EXPORT2 unum_parse (const UNumberFormat *fmt, const UChar *text, int32_t textLength, int32_t *parsePos, UErrorCode *status)
U_CAPI double U_EXPORT2 unum_parseDouble (const UNumberFormat *fmt, const UChar *text, int32_t textLength, int32_t *parsePos, UErrorCode *status)
U_CAPI void U_EXPORT2 unum_setAttribute (UNumberFormat *fmt, UNumberFormatAttribute attr, int32_t newValue)
U_CAPI void U_EXPORT2 unum_setDoubleAttribute (UNumberFormat *fmt, UNumberFormatAttribute attr, double newValue)
U_CAPI void U_EXPORT2 unum_setSymbol (UNumberFormat *fmt, UNumberFormatSymbol symbol, const UChar *value, int32_t length, UErrorCode *status)
U_CAPI void U_EXPORT2 unum_setTextAttribute (UNumberFormat *fmt, UNumberFormatTextAttribute tag, const UChar *newValue, int32_t newValueLength, UErrorCode *status)
U_CAPI int32_t U_EXPORT2 unum_toPattern (const UNumberFormat *fmt, UBool isPatternLocalized, UChar *result, int32_t resultLength, UErrorCode *status)


Generated by  Doxygen 1.6.0   Back to index