Page 1 sur 1

arrondissement d'un nombre

Posté : 27 nov. 2006, 10:53
par riadh
salut;
round(10.0305,3) donne 10.03;
Alors que avec d'autre plateforme donne 10.031;
est ce qu'il y a une méthode pour que php me donne 10.031 tel que les autres plateforme.
Merci.

Posté : 27 nov. 2006, 11:08
par DocType
Cela fonctionne parfaitement...depuis PHP4 !
Vérifie bien si ton php est supérieur à la version 3

Posté : 27 nov. 2006, 11:28
par riadh
Est ce que PHP4 va me donner 10.031;

Posté : 27 nov. 2006, 11:35
par Ryle
Il devrait :)

Sinon, avant de changer de version de php (chose qu'on ne peux pas toujours faire à son gré), tu peux aussi essayer d'utiliser la fonction number_format() :)

Posté : 27 nov. 2006, 11:42
par riadh
J'ai la version 4.2.2 et
number_format(10.0305,'3','') me donne aussi 10.030
number_format(10.0306,'3','') me donne 10.031

Posté : 27 nov. 2006, 12:04
par Ryle
Ah oki, j'étais pas parti dans la bonne direction alors, je pensais qu'il s'agissait d'un problème d'affichage de la 3ème décimale, pas de l'arrondi généré par celle ci :)

D'après les commentaires postés sur la doc ce serait effectivement un soucis sur certaines machines...

Posté : 27 nov. 2006, 13:19
par riadh
j'ai testé la fonction sous deux systémes différentes:
- Windows XP avec easyphp 1.7
- Linux avec PHP 4.2.2
ils donnent les mémes résultats
Comment je peux procédes pour corrigé le probléme

Posté : 27 nov. 2006, 19:28
par fab
tu peux toi même recoder la fonction ça peut s'averer long mais je pense que ça devrait aller quand même c'est une histoire et substr et de comparaison

Posté : 27 nov. 2006, 22:25
par Ajoloca
Bonsoir,

Voici QQ chose qui devrait correspondre
<?php
function my_round($n, $d = 0) {
   $n = $n - 0;
   if ($d === NULL) $d = 2;

   $f = pow(10, $d);
   $n += pow(10, - ($d + 1));
   $n = round($n * $f) / $f;
   $n += pow(10, - ($d + 1));
   $n += '';

   if ($d === 0){
       return substr($n, 0, strpos($n, '.'));
   }
   else{
   	return substr($n, 0, strpos($n, '.') + $d + 1);
	}
}
echo my_round('10.0305',3); // AFFICHE 10.031
?>

Posté : 29 nov. 2006, 12:24
par riadh
Merci Beaucoup pour le code. Ca devrais resolu le probléme.

Posté : 29 nov. 2006, 16:24
par riadh
Malheureusement le code m'affiche une valeur erronée pour :
my_round(10.0304,3) //m'affiche 10.031 au lieux de 10.030.
je n'ai pas arrivé a le corrigé.