On 16 Sep 2011, at 15:58, Cyril Lopez wrote:

> Can someone help me understand how money_format() rounds numbers ?
> 
> <?php
>  setlocale(LC_ALL, 'fr_FR.UTF-8');
>  $price = 12.665;
>  echo money_format('%i',$price);
>  // 12.66 EUR, 12.67 EUR expected
> 
>  $price2 = 12.666;
>  echo money_format('%i',$price2);
>  // 12.67 EUR, ok
> 
>  echo round($price,2);
>  // 12.67, ok
>  echo round($price2,2);
>  // 12.67, ok
> ?>
> 
> Misconfiguration ? Bug ?

It's a direct mapping to the libc function, strfmon [1], and an equivalent C 
script gave the same result so it's not a bug in PHP. Locales can't define 
rounding rules, so it's not related to that.

Googling for strfmon rounding errors doesn't get any useful results, so either 
this is by design or it's never caused anyone a problem.

Solution... pass the number through round before going in to money_format.

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to