Print Currency Number Format in PHP
Asked Answered
K

8

61

I have some price values to display in my page.

I am writing a function which takes the float price and returns the formatted currency val with currency code too..

For example, fnPrice(1001.01) should print $ 1,000.01

Kapellmeister answered 25/10, 2010 at 11:7 Comment(1)
Check out geekgong.com/formatting-currency-values-in-php for a nice little tut on this.Gertrudgertruda
R
151

The easiest answer is number_format().

echo "$ ".number_format($value, 2);

If you want your application to be able to work with multiple currencies and locale-aware formatting (1.000,00 for some of us Europeans for example), it becomes a bit more complex.

There is money_format() but it doesn't work on Windows and relies on setlocale(), which is rubbish in my opinion, because it requires the installation of (arbitrarily named) locale packages on server side.

If you want to seriously internationalize your application, consider using a full-blown internationalization library like Zend Framework's Zend_Locale and Zend_Currency.

Realgar answered 25/10, 2010 at 11:10 Comment(3)
For negative values you would get something like $-123.45, proper formatting should be -$123.45 however.Irreverent
@Irreverent did you find fix around this?Waistline
@Waistline $sign = "-"; $amount = "-500"; if(strpos($amount, $sign) !== false){ l.trim($amount, $sign); echo "-$ ".number_format($intval(amount), 2);}Bouquet
A
71

with the intl extension in PHP 5.3+, you can use the NumberFormatter class:

$amount = '12345.67';

$formatter = new NumberFormatter('en_GB',  NumberFormatter::CURRENCY);
echo 'UK: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL;

$formatter = new NumberFormatter('de_DE',  NumberFormatter::CURRENCY);
echo 'DE: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL;

which prints :

 UK: €12,345.67
 DE: 12.345,67 €
Alti answered 3/9, 2013 at 12:48 Comment(1)
So important to have a solution that doesn't require converting to a float first. So dangerous to use a float with currency.Synclastic
B
10

sprintf() is the PHP function for all sorts of string formatting http://php.net/manual/en/function.sprintf.php

I use this function:

function formatDollars($dollars){
  return '$ '.sprintf('%0.2f', $dollars);
}
Brimmer answered 25/10, 2010 at 11:12 Comment(2)
this won't add commas (thousands separators)Consort
Forgive the gravedig. You can wrap the $dollars (in the sprintf()) in a number_format(). That'll add the commasRosefish
V
7

I built this little function to automatically format anything into a nice currency format.

function formatDollars($dollars)
{
    return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2);
}

Edit

It was pointed out that this does not show negative values. I broke it into two lines so it's easier to edit the formatting. Wrap it in parenthesis if it's a negative value:

function formatDollars($dollars)
{
    $formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2);
    return $dollars < 0 ? "({$formatted})" : "{$formatted}";
}
Vanessa answered 21/3, 2014 at 18:42 Comment(2)
This doens't retain negative valuesElfont
This is true. I've updated the function to include negative number support. Thanks @ElfontVanessa
T
4

Reference Link : https://www.php.net/manual/en/function.number-format.php

$amount = 1235.56
echo number_format($amount, 2, '.', ',');

The output is : 1,235.56

If you don't need comma in output.Please remove comma inside function.

For example

$amount = 1235.56
echo number_format($amount, 2, '.', '');

The output is : 1235.56

Tremolant answered 30/8, 2021 at 9:12 Comment(0)
D
3

From the docs

<?php

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>
Demark answered 30/5, 2019 at 6:9 Comment(0)
E
2

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

$fmt = new NumberFormatter( 'de_DE', NumberFormatter::CURRENCY );
echo $fmt->formatCurrency(1234567.891234567890000, "EUR")."\n";
echo $fmt->formatCurrency(1234567.891234567890000, "RUR")."\n";

output will be

1.234.567,89 €
1.234.567,89 RUR

https://www.php.net/manual/en/numberformatter.formatcurrency.php

Ecchymosis answered 15/11, 2020 at 4:50 Comment(2)
According to the PHP Docs: This function has been DEPRECATED as of PHP 7.4.0, and REMOVED as of PHP 8.0.0. Relying on this function is highly discouraged.Mack
I have updated it. Thanks!Ecchymosis
T
1

PHP has a function called money_format for doing this. Read about this here.

Therewith answered 23/6, 2017 at 11:53 Comment(2)
this function money_format does not work on php version 7.1Bellerophon
this function is deprecated in 7.4 and removed from 8.0Hercule

© 2022 - 2024 — McMap. All rights reserved.