×Ö·û´®º¯Êý
ÔÚÏßÊֲ᣺ÖÐÎÄ Ó¢ÎÄ
PHPÊÖ²á

localeconv

(PHP 4 >= 4.0.5, PHP 5)

localeconvGet numeric formatting information

˵Ã÷

array localeconv ( void )

Returns an associative array containing localized numeric and monetary formatting information.

·µ»ØÖµ

localeconv() returns data based upon the current locale as set by setlocale(). The associative array that is returned contains the following fields:

Array element Description
decimal_point Decimal point character
thousands_sep Thousands separator
grouping Array containing numeric groupings
int_curr_symbol International currency symbol (i.e. USD)
currency_symbol Local currency symbol (i.e. $)
mon_decimal_point Monetary decimal point character
mon_thousands_sep Monetary thousands separator
mon_grouping Array containing monetary groupings
positive_sign Sign for positive values
negative_sign Sign for negative values
int_frac_digits International fractional digits
frac_digits Local fractional digits
p_cs_precedes TRUE if currency_symbol precedes a positive value, FALSE if it succeeds one
p_sep_by_space TRUE if a space separates currency_symbol from a positive value, FALSE otherwise
n_cs_precedes TRUE if currency_symbol precedes a negative value, FALSE if it succeeds one
n_sep_by_space TRUE if a space separates currency_symbol from a negative value, FALSE otherwise
p_sign_posn
  • 0 - Parentheses surround the quantity and currency_symbol
  • 1 - The sign string precedes the quantity and currency_symbol
  • 2 - The sign string succeeds the quantity and currency_symbol
  • 3 - The sign string immediately precedes the currency_symbol
  • 4 - The sign string immediately succeeds the currency_symbol
n_sign_posn
  • 0 - Parentheses surround the quantity and currency_symbol
  • 1 - The sign string precedes the quantity and currency_symbol
  • 2 - The sign string succeeds the quantity and currency_symbol
  • 3 - The sign string immediately precedes the currency_symbol
  • 4 - The sign string immediately succeeds the currency_symbol

The p_sign_posn, and n_sign_posn contain a string of formatting options. Each number representing one of the above listed conditions.

The grouping fields contain arrays that define the way numbers should be grouped. For example, the monetary grouping field for the nl_NL locale (in UTF-8 mode with the euro sign), would contain a 2 item array with the values 3 and 3. The higher the index in the array, the farther left the grouping is. If an array element is equal to CHAR_MAX, no further grouping is done. If an array element is equal to 0, the previous element should be used.

·¶Àý

Example #1 localeconv() example

<?php
if (false !== setlocale(LC_ALL'nl_NL.UTF-8@euro')) {
    
$locale_info localeconv();
    
print_r($locale_info);
}
?>

ÒÔÉÏÀý³Ì»áÊä³ö£º

Array
(
    [decimal_point] => .
    [thousands_sep] =>
    [int_curr_symbol] => EUR
    [currency_symbol] => €
    [mon_decimal_point] => ,
    [mon_thousands_sep] =>
    [positive_sign] =>
    [negative_sign] => -
    [int_frac_digits] => 2
    [frac_digits] => 2
    [p_cs_precedes] => 1
    [p_sep_by_space] => 1
    [n_cs_precedes] => 1
    [n_sep_by_space] => 1
    [p_sign_posn] => 1
    [n_sign_posn] => 2
    [grouping] => Array
        (
        )

    [mon_grouping] => Array
        (
            [0] => 3
            [1] => 3
        )

)

²Î¼û


×Ö·û´®º¯Êý
ÔÚÏßÊֲ᣺ÖÐÎÄ Ó¢ÎÄ
PHPÊÖ²á
PHPÊÖ²á - N: Get numeric formatting information

Óû§ÆÀÂÛ:

PixEye dot DELETE at bigfoot dot com (24-Nov-2007 09:15)

A function to get the right money & number formats:
<?php
function displayLocales($number, $isMoney, $lg='en_US.utf8') {
   
$ret = setLocale(LC_ALL, $lg);
   
setLocale(LC_TIME, 'Europe/Paris');
    if (
$ret===FALSE) {
        echo
"Language '$lg' is not supported by this system.\n";
        return;
    }
   
$LocaleConfig = localeConv();
    forEach(
$LocaleConfig as $key => $val) $$key = $val;

   
// Sign specifications:
   
if ($number>0) {
       
$sign = $positive_sign;
       
$sign_posn = $p_sign_posn;
       
$sep_by_space = $p_sep_by_space;
       
$cs_precedes = $p_cs_precedes;
    } else {
       
$sign = $negative_sign;
       
$sign_posn = $n_sign_posn;
       
$sep_by_space = $n_sep_by_space;
       
$cs_precedes = $n_cs_precedes;
    }

   
// Number format:
   
$n = number_format(abs($number), $frac_digits,
       
$decimal_point, $thousands_sep);
   
$n = str_replace(' ', '&nbsp;', $n);
    switch(
$sign_posn) {
        case
0: $n = "($n)"; break;
        case
1: $n = "$sign$n"; break;
        case
2: $n = "$n$sign"; break;
        case
3: $n = "$sign$n"; break;
        case
4: $n = "$n$sign"; break;
        default:
$n = "$n [error sign_posn=$sign_posn&nbsp;!]";
    }

   
// Currency format:
   
$m = number_format(abs($number), $frac_digits,
       
$mon_decimal_point, $mon_thousands_sep);
    if (
$sep_by_space) $space = ' '; else $space = '';
    if (
$cs_precedes) $m = "$currency_symbol$space$m";
    else
$m = "$m$space$currency_symbol";
   
$m = str_replace(' ', '&nbsp;', $m);
    switch(
$sign_posn) {
        case
0: $m = "($m)"; break;
        case
1: $m = "$sign$m"; break;
        case
2: $m = "$m$sign"; break;
        case
3: $m = "$sign$m"; break;
        case
4: $m = "$m$sign"; break;
        default:
$m = "$m [error sign_posn=$sign_posn&nbsp;!]";
    }
    if (
$isMoney) return $m; else return $n;
}

$number = -12345.12345;
echo
'<div>'.displayLocales($number, FALSE)."</div>\n";
echo
'<div>'.displayLocales($number, TRUE)."</div>\n";
?>

verdy_p at wanadoo dot fr (23-Jul-2001 03:13)

The C99 standard modified slightly the definition of the international currency symbol, which is now 4 characters long instead of 3 in previous definitions. The fourth character will most often be an ASCII space, but its effective value is the locale-specific spacing character used for numeric grouping (i.e. the one refered by [sep_by_space] and [grouping])...