|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2012-09-22 16:39 UTC] mic dot gallego at gmail dot com
Description:
------------
Hi,
The formatCurrency of NumberFormatter does not correctly take into account the
fraction digits (while PHP money_format function works as expected).
Test script:
---------------
$usFormatter = new NumberFormatter('en-US', NumberFormatter::CURRENCY);
$usFormatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 0);
echo $usFormatter->formatCurrency('45', 'USD') . PHP_EOL;
echo $usFormatter->formatCurrency('45', 'EUR') . PHP_EOL;
$frFormatter = new NumberFormatter('fr-FR', NumberFormatter::CURRENCY);
$frFormatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 0);
echo $frFormatter->formatCurrency('45', 'EUR') . PHP_EOL;
echo $frFormatter->formatCurrency('45', 'USD') . PHP_EOL;
Expected result:
----------------
$45
€45
45 €
45 $US
Actual result:
--------------
$45
€45.00
45 €
45,00 $US
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 06:00:01 2025 UTC |
It still doesnt work with PHP7.0 and libicu57.1-8 $value = 1234567899.987654321; $formatter = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY); $formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 0); $result = $formatter->formatCurrency($value, 'EUR'); echo "value de_DE (EUR): $result<br/>\n"; $formatter = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY); $formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 0); $result = $formatter->formatCurrency($value, 'USD'); echo "value de_DE (USD): $result<br/>\n"; $formatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY); $formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 0); $result = $formatter->formatCurrency($value, 'USD'); echo "value en_US (USD): $result<br/>\n"; $formatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY); $formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 0); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 0); $result = $formatter->formatCurrency($value, 'EUR'); echo "value en_US (EUR): $result<br/>\n"; Expected result: ---------------- value de_DE (EUR): 1.234.567.900 € value de_DE (USD): 1.234.567.900 $ value en_US (USD): $1,234,567,900 value en_US (EUR): €1,234,567,900 Actual result: -------------- value de_DE (EUR): 1.234.567.900 € value de_DE (USD): 1.234.567.899,99 $ value en_US (USD): $1,234,567,900 value en_US (EUR): €1,234,567,899.99