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

Russia Must Remove Putin
  • 374,368
  • 89
  • 403
  • 331
KoolKabin
  • 17,157
  • 35
  • 107
  • 145
  • Check out https://www.geekgong.com/formatting-currency-values-in-php/ for a nice little tut on this. – Amila K. Feb 22 '21 at 13:12

8 Answers8

150

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.

Pekka
  • 442,112
  • 142
  • 972
  • 1,088
70

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 €
Mathieu
  • 5,495
  • 2
  • 31
  • 48
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);
}
Jim
  • 1,053
  • 9
  • 14
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}";
}
Jam
  • 101
  • 1
  • 6
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

AngularJMK
  • 1,178
  • 13
  • 15
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

?>
HardcoreHenry
  • 5,909
  • 2
  • 19
  • 44
Sandeep Sherpur
  • 2,418
  • 25
  • 27
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

Ranch Camal
  • 501
  • 1
  • 4
  • 12
  • 2
    According to the [PHP Docs](http://php.net/manual/en/function.money-format.php): *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.* – HoldOffHunger Dec 16 '21 at 18:16
  • I have updated it. Thanks! – Ranch Camal Jan 20 '22 at 20:01
1

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

Pila
  • 5,460
  • 1
  • 19
  • 30