[PHP] Affichage de nombre très petits

Résolu
Sebast076 -  
 Utilisateur anonyme -
Bonjour,

j'ai un petit souci avec l'affichage de nombre tel que 0.00005 avec du php.

voici mon code :
$i = $aDonnees2['nombre'];
$i = ( $i * 100 / 3000000000 );
echo $i = round( $i, 5 );


mon souci est qu'avec ce code ma page va m'afficher 1.0E-5 comme résultat.

j'ai essayé de la manière suivante :

echo number_format($total, 5, ',', ' ');


la la page m'affiche bien les 5 chiffres après la virgule, mais lorsque le résultat donne un chiffre 'rond' (10 par exemple), cela m'affiche 10.00000.

Il y a t'il un moyen de contourner ce problème pour afficher les nombre entier sans virgule ?
Configuration: Windows XP
Firefox 3.0.10

4 réponses

  1. Sebast076
     
    voivi la solution trouvé sur phpfrance et qui fonctionne :

    echo number_format( $i, round( abs( log10( $i-floor( $i ) ) ) ) );
    2
    1. Utilisateur anonyme
       
      Yeah pas mal ^^

      C'était sur que ça existait déjà ^^

      Quand j'essaie

      $nombre=10.12345;
      echo number_format( $nombre, round( abs( log10( $nombre-floor($nombre ) ) ) ) );

      Il m'affiche 10.1 :S

      Pour 1000 il affiche 1,000

      Donc à revoir :P

      j'avais fais ça sinon :
      <?php
      
      function supprimer_zero_droite($string)
      {
      	$nombre=explode(".",$string);
      	if(count($nombre)==1)
      		$nombre=explode(",",$string);
      
      	if(count($nombre)==2)
      	{
      		for($i=-1; $i>-strlen($string); $i--)
      		{
      			if(substr($string,$i,1)=="." || substr($string,$i,1)==",")
      			{
      				$string = substr($string,0,strlen($string)+$i);				
      				break;
      			}
      			if(substr($string,$i,1)!=0)
      			{
      				$string = substr($string,0,strlen($string)+$i+1);				
      				break;
      			}
      		}
      	}
      	return $string;
      }
      
      $nombre = number_format("10", 10, ',', ' ');
      echo supprimer_zero_droite($nombre);
      
      echo "<br/>";
      
      $nombre=10.12345;
      echo supprimer_zero_droite($nombre);
      
      ?>
      0
  2. Utilisateur anonyme
     
    Salut !

    Je ne sais pas du tout, mais du peux faire une petite fonction qui découpe la chaine et compare les chiffres de droites, si ça vaut 0 tu retiens la partie de droite

    <?php
    function arrondir($string)
    {
      //si le séparateur est un point
      $nombre=explode(".",$string);
    
      //si c'est une virgule
      if(count($nombre)==1)
    	$nombre=explode(",",$string);
    
      //vérifie que le découpage à fonctionné et dans ce cas c'est un nombre décimal
      //compare la partie de droite à 0
      if(count($nombre)>1 && $nombre[1]==0)
        return $nombre[0]; //retourne la partie entière
      else
    	return $string; //retourne la chaine
    }
    
    $nombre = number_format("10", 5, ',', ' ');
    echo arrondir($nombre);
    
    echo "<br/>";
    
    $nombre=10.12345;
    echo arrondir($nombre);
    
    ?>


    Sortie

    10
    10.12345
    0
  3. Sebast076
     
    j'ai essayé ta fonction, mais si mon chiffre a afficher est 0.001 par exemple, elle retourne 1
    0
  4. Sebast076
     
    en fait dès que je dépasse les 5 chiffre après la virgule ta fonction ne fonctionne plus ><
    0
    1. Utilisateur anonyme
       
      ma fonction est un exemple ^^

      J'ai testé vite fait =)

      A toi de bidouillé pour que ça fonctionne et viens poster ta modif ici ^^

      Je vais quand même regarder.

      En fait ce n'est pas très correct ce que j'ai fais. En effet si j'arrondi un nombre 0.00000001000 ça ne marche pas et les 3 0 de la fin sont inutiles.

      Il ne faut bien découper la chaine, mais ensuite il faut lire de droite à gauche et supprimer tous les 0.
      0