 |
money_format (PHP 4 >= 4.3.0, PHP 5) money_format -- Formats a number as a currency string Descriptionstring money_format ( string format, float number )
money_format() returns a formatted version of
number. This function wraps the C library
function strfmon(), with the difference that
this implementation converts only one number at a time.
注:
The function money_format() is only defined if
the system has strfmon capabilities. For example, Windows does
not, so money_format() is undefined in Windows.
The format specification consists of the following sequence:
注:
The LC_MONETARY category of the locale settings,
affects the behavior of this function. Use
setlocale() to set to the appropriate default locale
before using this function.
Characters before and after the formatting string will be returned
unchanged.
例子 1. money_format() Example
We will use different locales and format specifications to
illustrate the use of this function.
<?php
$number = 1234.56;
// let's print the international format for the en_US locale setlocale(LC_MONETARY, 'en_US'); echo money_format('%i', $number) . "\n"; // USD 1,234.56
// Italian national format with 2 decimals` setlocale(LC_MONETARY, 'it_IT'); echo money_format('%.2n', $number) . "\n"; // L. 1.234,56
// Using a negative number $number = -1234.5672;
// US national format, using () for negative numbers // and 10 digits for left precision setlocale(LC_MONETARY, 'en_US'); echo money_format('%(#10n', $number) . "\n"; // ($ 1,234.57)
// Similar format as above, adding the use of 2 digits of right // precision and '*' as a fill character echo money_format('%=*(#10.2n', $number) . "\n"; // ($********1,234.57) // Let's justify to the left, with 14 positions of width, 8 digits of // left precision, 2 of right precision, withouth grouping character // and using the international format for the de_DE locale. setlocale(LC_MONETARY, 'de_DE'); echo money_format('%=*^-14#8.2i', 1234.56) . "\n"; // DEM 1234,56****
// Let's add some blurb before and after the conversion specification setlocale(LC_MONETARY, 'en_GB'); $fmt = 'The final value is %i (after a 10%% discount)'; echo money_format($fmt, 1234.56) . "\n"; // The final value is GBP 1,234.56 (after a 10% discount)
?>
|
|
See also: setlocale(),
number_format(),sprintf(),
printf() and sscanf().
richard dot selby at uk dot clara dot net
17-Feb-2006 11:02
Double check that money_format() is defined on any version of PHP you plan your code to run on. You might be surprised.
For example, it worked on my Linux box where I code, but not on servers running BSD 4.11 variants. (This is presumably because strfmon is not defined - see note at the top of teis page). It's not just a windows/unix issue.
admin at sellchain dot com
13-Jan-2006 01:04
If you are just looking to format a counter or something that does not represent money, and you want to avoid rounding, etc, just use this on a NON-DECIMAL NUMBER.
<?
echo "2406 is now " . Thousands(2406);
function Thousands($amt) {
return number_format($amt,0,'',',')
}
?>
The Mighty Will
26-Jan-2004 04:14
I didn't see it mentioned here, yet it threw me for a loop. Once you use this function, you can no longer use these formatted numbers to perform normal math operations like addition. This may be true with other functions as well, but I personally have experience with this scenario.
Example:
$curOne = money_format('%#4n',123.05);
#returns $ 123.05
$curTwo = money_format('%#4n',41.95);
#returns $ 41.95
echo $curOne + $curTwo;
#this will return $ 0.00
Instead:
$curOne = 123.05;
#returns 123.05
$curTwo = 41.95;
#returns 41.95
echo money_format('%#4n',$curOne + $curTwo);
#this will return $ 165.00
stefan at ioc dot nl
16-Jan-2004 01:31
To display EUR or the euro-sign, try this:
<?php
setlocale(LC_ALL, 'nl_NL@euro');
echo money_format('%i', 10000);
echo "<br>";
echo htmlentities(money_format('%.2n', 10000),ENT_QUOTES,'ISO-8859-15');
?>
rs98101 at yahoo dot com
14-Jun-2003 02:54
For applications where precision matters (i.e. anything where accountants and auditors get involved) I would not recommend using floats to keep track of money. You will notice hard to trace rounding errors permeated through your application. Use this function only for values where precision is not a must.
|  |