[PHP] Affichage de nombre très petits

Résolu/Fermé
Sebast076 - 5 juin 2009 à 13:35
 Utilisateur anonyme - 5 juin 2009 à 14:38
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 ?
A voir également:

4 réponses

voivi la solution trouvé sur phpfrance et qui fonctionne :

echo number_format( $i, round( abs( log10( $i-floor( $i ) ) ) ) );
2
Utilisateur anonyme
5 juin 2009 à 14:38
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
Utilisateur anonyme
5 juin 2009 à 13:50
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
j'ai essayé ta fonction, mais si mon chiffre a afficher est 0.001 par exemple, elle retourne 1
0
en fait dès que je dépasse les 5 chiffre après la virgule ta fonction ne fonctionne plus ><
0
Utilisateur anonyme
5 juin 2009 à 14:13
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