Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2011, 19h55   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Fonction number_format...ne fonctionne pas bien

Bonjour à tous,

J'ai un petit souci d'arrondi de chiffres alors que j'utilise number_format comme suit :

Code :
1
2
3
4
5
 
function prix($prix){
$prix = number_format($prix ,2);
return $prix;
}
Voici l'exemple concret de ce qui me gêne, il s'agit de calculs de prix HT / TTC dans une facture :

Non arrondi :

Citation:
Produit 1 : 41.80602006689
Produit 2 : 9.478672985782
Total : 51.284693052672
Arrondi avec la fonction ci-dessus :

Produit 1 : 41.81 (logique puisque 41.806)
Produit 2 : 9.48 (logique puisque 9.478)
Total : 51.28 (logique puisque 51.284)

Mais, visuellement, c'est pas terrible que 41.81 + 9.48 = 51.28...je préfèrerais avoir 51.29.

Comment contourner ce petit problème ?
Merci d'avance.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 21h54   #2
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

En passant un paramêtre formaté à l'aide de la fonction fonction round() à la fonction number_format() ça passe mieux.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
function prix($prix){
	$prix=number_format( round($prix,2) ,2);
	return $prix;
}
 
$P1=prix(41.80602006689);
$P2=prix(9.478672985782);
 
$Total=$P1+$P2;
 
echo $P1.' + '.$P2.' = '.$Total; // 41.81 + 9.48 = 51.29
J'ai tenté avec uniquement la fonction round() mais ça passait pas.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 08h42   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour, et merci de te pencher sur ma question.

J'ai testé ta fonction, et effectivement, sur ce coup, ça fonctionne très bien.
Mais regarde cet autre exemple :

Il s'agit là de calculer un HT d'après un TTC et de le multiplier par une quantité.

Prix TTC : 15.30
TVA : 5.50 %
HT non arrondi : 14.502369668246
HT arrondi avec ta fonction : 14.50 (logique)
Quantité : 5
Total HT non arrondi : 72.511848341232
Total HT arrondi : 72.51

Donc, encore, visuellement, on a : 14.50 X 5 = 72.51
Et, ça, c'est gênant, je trouve.

La fonction que j'utilise pour trouver le HT d'un TTC :

Code :
1
2
3
4
5
 
function calcule_ht($ttc, $tva){
$ht = $ttc / (1 + ($tva / 100));
return $ht;
}
Je pense qu'elle est correcte, puisque à la calculette, on fait, en gardant les chiffres de mon exemple : 15.30 / 1.055 = 14.50

N'y aurait-il pas une fonction "universelle" qui va bien dans tous les cas ?
Merci de ton aide.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 16h06   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
La fonction de calcul HT doit renvoyer un nombre arrondi à l'aide de la fonction round()
Code :
1
2
3
4
function calcule_ht($ttc, $tva){
	$ht = round($ttc / (1 + ($tva / 100)),2);
	return $ht;
}
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 08h13   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Effectivement, c'est bien ça.
Je te remercie beaucoup.
Bonne journée.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h18.


 
 
 
 
Partenaires

Hébergement Web