IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction number_format...ne fonctionne pas bien [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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.

  2. #2
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    En passant un paramêtre formaté à l'aide de la fonction fonction round() à la fonction number_format() ça passe mieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    La fonction de calcul HT doit renvoyer un nombre arrondi à l'aide de la fonction round()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function calcule_ht($ttc, $tva){
    	$ht = round($ttc / (1 + ($tva / 100)),2);
    	return $ht;
    }

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Effectivement, c'est bien ça.
    Je te remercie beaucoup.
    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Maps] Fonction qui ne fonctionne pas sous chrome mais bien sous firefox
    Par Msysteme dans le forum APIs Google
    Réponses: 1
    Dernier message: 04/06/2015, 20h29
  2. Icone systray de connexion wifi ne fonctionne pas bien ?
    Par elitost dans le forum Windows XP
    Réponses: 5
    Dernier message: 24/02/2006, 09h43
  3. fonction plpgsql qui fonctionne pas...
    Par Empty_body dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/01/2006, 18h22
  4. La fonction CurrentDb() ne fonctionne pas dans une requête
    Par Sébastien Le Goyet dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2005, 17h46
  5. [PERL] un grep qui ne fonctionne pas bien
    Par LE NEINDRE dans le forum Langage
    Réponses: 6
    Dernier message: 03/11/2005, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo