Nous ne répondons seulement qu'aux sujets dont l'auteur a complété sa signature [Lire]


Multiplication de variables PHP et résultat décimal ?

Soutien général pour les problèmes techniques avec OpenCart

Multiplication de variables PHP et résultat décimal ?

Messagepar mariobello » 28 Jan 2013, 02:37

Bonjour,

Dans mes fiches produits, je souhaite afficher un prix total pour chaque conditionnement.
Par exemple :
10 litres 108.00€ soit 10,80€ le Litre.
20 litres 204.00€ soit 10,20€ le Litre.
ect....

Voir une fiche produit d'exemple sur mon site :
http://www.bressechimie.com/hygiene-et- ... duct_id=81

Dans l'extrait du fichier "product.tpl" suivant :
Code: Tout sélectionner
<?php if ($discounts) { ?>
        <br />
        <div class="discount">
        <?php foreach ($discounts as $discount) { ?>
           
        <?php
          echo sprintf($text_discount, $discount['quantity'], $upc,
          $discount['price'], $upc); ?><br />

        <?php } ?>
        </div>
        <?php } ?>
      </div>
      <?php } ?>


J'ai essayé de multiplier la variable prix unitaire "$discount['price']" par la quantité "$discount['quantity']" mais le résultat ne tient pas compte des chiffres après la virgule et je me retrouve avec une valeur entière et qui plus est fausse car les décimales du prix unitaire n'ont pas été prises en compte dans la multiplication, comme les valeurs sont tirées de la base de donnée, peut être les variables sont de type chaine, string !

(La variable "$upc" que j'ai rajouté me sert à afficher l'unité du conditionnement, Litre, Kilo, Pièce, ect.. mais elle n'intervient pas dans mon problème de valeur décimale.)

N'étant pas très féru en PHP, si un spécialiste pourrait m'indiquez comment obtenir et afficher mon total produit pour chaque conditionnement !
Dernière édition par mariobello le 05 Fév 2013, 19:00, édité 2 fois.
Opencart : Version 1.5.4.1 + extension langue french
Hébergeur(s) : Planethoster pour un site et O2switch pour un autre site
PHP Version 5.3.19 pour les deux hébergements
Template installé : Satsuma 1.5 orange theme identique à lime green thème, couleur dominante mise à part.

Il vaut mieux un qui sait que cent qui cherchent !
mariobello
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 53
Inscription: 23 Déc 2012, 19:23

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar Malaiac » 28 Jan 2013, 10:37

Je vois pas comment te donner un code exact sans voir la structure de l'array discount
Mais pour bien gérer et afficher les décimales, la fonction
http://fr.php.net/number_format
peut t'aider
OpenCart 1.5.4.1 - 1and1 mutu - php5.2.17
Malaiac
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 18
Inscription: 19 Jan 2013, 12:10

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar mariobello » 29 Jan 2013, 16:56

Salut Malaiac et merci pour ton soutien,

Je ne suis pas parvenu à mes fins malgré de multiples essais de code que je ne sais pas formuler correctement !
Le but étant de faire une simple multiplication, prix unitaire X quantité pour obtenir et afficher le prix total mais apparemment ce n'est pas si facile à faire pour moi !

Voila la démarche d'après ce que j'ai pu comprendre :
En prenant pour exemple, prix unitaire "$discount['price']" : 10,80€
Quantité, "$discount['quantity']" : 11

Les variables "$discount['quantity']" et "$discount['price']" sont de type string.
La variable "$discount['price']" indique un prix au format français soit avec la virgule à la place du point décimal et inclus aussi le caractère euro soit "&#128;" à la fin comme dans cet exemple --> 10,80€

Il faudrait donc transformer la virgule en point décimal pour obtenir "10.80€", supprimer le caractère "€" pour obtenir "10.80", transformer la variable string "$discount['price']" en float pour ensuite faire la multiplication avec la variable quantité "$discount['quantity']" qui restera de type string pour obtenir le prix total sous forme de variable float par exemple "$discounttotalprice" qui serait égal à "118.80"

Il faudrait ensuite re-formater le résultat pour l'afficher avec la virgule comme séparateur décimal et le symbole "€" à la fin soit "118,80€"

Si quelqu'un peut me fournir le code php qui convient à ce résultat, ce serait sympat !
Opencart : Version 1.5.4.1 + extension langue french
Hébergeur(s) : Planethoster pour un site et O2switch pour un autre site
PHP Version 5.3.19 pour les deux hébergements
Template installé : Satsuma 1.5 orange theme identique à lime green thème, couleur dominante mise à part.

Il vaut mieux un qui sait que cent qui cherchent !
mariobello
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 53
Inscription: 23 Déc 2012, 19:23

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar Malaiac » 29 Jan 2013, 18:29

Code: Tout sélectionner
<?php
$discount = array('price' => '10,80&#128;', 'quantity' => 11);
$total_price = $discount['price'];
$total_price = substr($total_price,0,strpos($total_price,',')+3);
$total_price = str_replace(',','.',$total_price);
$total_price = floatval($total_price);
$total_price = $total_price * $discount['quantity'];
$total_price = number_format(round($total_price, 2), 2, ',', ' ');
$total_price .= ' &#128;';
echo "\n $total_price";
// > 118,80 €
OpenCart 1.5.4.1 - 1and1 mutu - php5.2.17
Malaiac
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 18
Inscription: 19 Jan 2013, 12:10

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar mariobello » 30 Jan 2013, 03:11

Merci Malaiac, cela marche presque parfaitement !

Il reste juste un défaut, quand le prix unitaire "$discount['price']" comporte 4 chiffres à gauche de la virgule, le résultat est faussé, cela doit être dû à au traitement pour l'espace entre les milliers je suppose ?
Cela ne me gène pas vraiment car ce sont des valeurs importantes que je n'utiliserai peut être jamais !

Voir exemple sur une page produit de mon site dans la dernière ligne du tableau : (Valeur de test bidon ! )
"$discount['quantity']" 50 * "$discount['price']" 2000.00€ --> Résultat, 100.00€ au lieu de 100 000.00€ !
http://www.bressechimie.com/hygiene-et- ... duct_id=81

Voici mon code pour le fichier "product.tpl", adapté selon tes sources :
Code: Tout sélectionner
      <div class="discount">
     <?php foreach ($discounts as $discount) { ?>           
     <?php
     $total_price_discount = $discount['price'];
          $total_price_discount =
          substr($total_price_discount,0,strpos($total_price_discount,',')+3);
          $total_price_discount = str_replace(',','.',$total_price_discount);
          $total_price_discount = floatval($total_price_discount);
          $total_price_discount = $total_price_discount * $discount['quantity'];
          $total_price_discount = number_format(round($total_price_discount, 2), 2,
          ',', ' ');
          $total_price_discount .= '&#128;';
          $total_price_discount = "\n $total_price_discount";
         
     echo sprintf($text_discount, $discount['quantity'], $upc,
           $total_price_discount, $discount['price'], $upc); ?><br />

     <?php } ?>
        </div>
        <?php } ?>
      </div>
Opencart : Version 1.5.4.1 + extension langue french
Hébergeur(s) : Planethoster pour un site et O2switch pour un autre site
PHP Version 5.3.19 pour les deux hébergements
Template installé : Satsuma 1.5 orange theme identique à lime green thème, couleur dominante mise à part.

Il vaut mieux un qui sait que cent qui cherchent !
mariobello
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 53
Inscription: 23 Déc 2012, 19:23

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar Malaiac » 01 Fév 2013, 10:52

ton site apparait en mode maintenance pour moi :)
je vais retester chez moi

attention aux fautes de frappe ( = au lieu de .= en avant dernière ligne)

voici le code d'apres tes modifs, que j'ai vérifie fonctionnel pour des montants jusqu'a 900 000 euros piece
Code: Tout sélectionner
$discount = array('price' => '10250,80&#128;', 'quantity' => 11);
$total_price = $discount['price'];
$total_price = substr($total_price,0,strpos($total_price,',')+3);
$total_price = str_replace(',','.',$total_price);
$total_price = floatval($total_price);
$total_price = $total_price * $discount['quantity'];
$total_price = number_format(round($total_price, 2), 2, ',', ' ');
$total_price .= ' E';
echo "\n $total_price\n\n";
// > 118,80 €

// mes ajouts pour avoir une valeur
$upc = "10%";
$text_discount = "Ca te fait %d produits (upc %s) pour %s au lieu de %s en prix unitaire (upc %s)";

$total_price_discount = $discount['price'];
$total_price_discount = substr($total_price_discount,0,strpos($total_price_discount,',')+3);
$total_price_discount = str_replace(',','.',$total_price_discount);
$total_price_discount = floatval($total_price_discount);
$total_price_discount = $total_price_discount * $discount['quantity'];
$total_price_discount = number_format(round($total_price_discount, 2), 2,',', ' ');
$total_price_discount .= ' E';
echo sprintf($text_discount, $discount['quantity'], $upc, $total_price_discount, $discount['price'], $upc);
OpenCart 1.5.4.1 - 1and1 mutu - php5.2.17
Malaiac
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 18
Inscription: 19 Jan 2013, 12:10

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar mariobello » 03 Fév 2013, 14:34

Bonjour Malaiac,

Ta dernière solution ne fonctionne pas car je n'avais pas précisé une donnée essentielle !

La valeur de départ avec 4 chiffres à gauche de la virgule attribuée à la variable "$discount['price']" se présente sous la forme 10.250,80&#128; et non pas 10250,80&#128; (le séparateur des milliers est un ".")

Donc le traitement que tu m'a proposé plus haut ne permet pas d'obtenir le résultat escompté qui doit être "112.758,80&#128;"ou mieux encore avec un espace à la place du point "112 758,80&#128;" pour l'exemple suivant :
Code: Tout sélectionner
$discount = array('price' => '10.250,80&#128;', 'quantity' => 11);


Pourrait tu m'apporter une correction du code, merci ?

Pour le moment Je ne peux pas afficher publiquement mon site car il y a beaucoup trop de données erronées !
Opencart : Version 1.5.4.1 + extension langue french
Hébergeur(s) : Planethoster pour un site et O2switch pour un autre site
PHP Version 5.3.19 pour les deux hébergements
Template installé : Satsuma 1.5 orange theme identique à lime green thème, couleur dominante mise à part.

Il vaut mieux un qui sait que cent qui cherchent !
mariobello
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 53
Inscription: 23 Déc 2012, 19:23

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar mariobello » 05 Fév 2013, 18:56

Salut l'ami Malaiac !

Parfait, tout marche à merveille !

Voici le code final, toujours selon tes sources.

Code: Tout sélectionner
<?php       
$total_price = $discount['price'];
$total_price = str_replace('.','',$total_price);
$total_price = substr($total_price,0,strpos($total_price,',')+3);
$total_price = str_replace(',','.',$total_price);
$total_price = floatval($total_price);
$total_price = $total_price * $discount['quantity'];
$total_price = number_format(round($total_price, 2), 2, ',', ' ');
$total_price .= ' &#128;';
$total_price = "\n $total_price\n\n";

$total_price_discount = $discount['price'];
$total_price_discount = substr($total_price_discount,0,strpos($total_price_discount,',')+3);
$total_price_discount = str_replace(',','.',$total_price_discount);
$total_price_discount = floatval($total_price_discount);
$total_price_discount = $total_price_discount * $discount['quantity'];
$total_price_discount = number_format(round($total_price_discount, 2), 2,',', ' ');
$total_price_discount .= ' &#128;';
$total_price_discount = "\n $total_price\n\n";
 
echo sprintf($text_discount, $discount['quantity'], $upc, $total_price_discount, $discount['price'], $upc_article); ?>


Mes sites : http://www.bressechimie.com


A la place de la facture, accepterai tu une caisse de considération ?

Heeeu, comment on enlève le point des milliers sur l'affichage du prix unitaire au litre ?
Opencart : Version 1.5.4.1 + extension langue french
Hébergeur(s) : Planethoster pour un site et O2switch pour un autre site
PHP Version 5.3.19 pour les deux hébergements
Template installé : Satsuma 1.5 orange theme identique à lime green thème, couleur dominante mise à part.

Il vaut mieux un qui sait que cent qui cherchent !
mariobello
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 53
Inscription: 23 Déc 2012, 19:23

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar Malaiac » 09 Fév 2013, 21:54

Juste un petit str replace pour virer le point
Code: Tout sélectionner
$discount = array('price' => '10250,80&#128;', 'quantity' => 11);
$discount = array('price' => '10.250,80&#128;', 'quantity' => 11);
$total_price = $discount['price'];
$total_price = str_replace('.','',$total_price);
$total_price = substr($total_price,0,strpos($total_price,',')+3);
$total_price = str_replace(',','.',$total_price);
$total_price = floatval($total_price);
$total_price = $total_price * $discount['quantity'];
$total_price = number_format(round($total_price, 2), 2, ',', ' ');
$total_price .= ' E';
echo "\n $total_price\n\n";
// > 118,80 €

// mes ajouts pour avoir une valeur
$upc = "10%";
$text_discount = "Ca te fait %d produits (upc %s) pour %s au lieu de %s en prix unitaire (upc %s)";

$total_price_discount = $discount['price'];
$total_price_discount = substr($total_price_discount,0,strpos($total_price_discount,',')+3);
$total_price_discount = str_replace(',','.',$total_price_discount);
$total_price_discount = floatval($total_price_discount);
$total_price_discount = $total_price_discount * $discount['quantity'];
$total_price_discount = number_format(round($total_price_discount, 2), 2,',', ' ');
$total_price_discount .= ' E';
echo sprintf($text_discount, $discount['quantity'], $upc, $total_price_discount, $discount['price'], $upc);


La prochaine fois, donne tous les éléments en même temps :)

Pour la facture j'envoie ou ? :D
OpenCart 1.5.4.1 - 1and1 mutu - php5.2.17
Malaiac
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 18
Inscription: 19 Jan 2013, 12:10

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar Malaiac » 10 Fév 2013, 11:15

Pour le séparateur de milliers, normalement number_format le gère bien
http://fr.php.net/number_format
avec cette ligne :
Code: Tout sélectionner
number_format(round($total_price, 2), 2, ',', ' ');

tu indiques que tu veux formater un nombre : arrondi à 2 décimales, avec 2 chiffres après la virgule, avec une virgule comme marqueur décimal (2,13) , et avec un espace comme séparateur de milliers. Vérifie d'avoir bien mis un espace sur la dernière variable.
Eventuellement, essaie de faire un set_locale :
Code: Tout sélectionner
setlocale(LC_ALL, 'fr_FR);

au début de ton code

fais gaffe quand meme que les divisions / multiplications doivent pas être faites comme il faut à un moment, car le prix du litre augmente avec la quantité ... :D
OpenCart 1.5.4.1 - 1and1 mutu - php5.2.17
Malaiac
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 18
Inscription: 19 Jan 2013, 12:10

Re: Multiplication de variables PHP et résultat décimal ?

Messagepar mariobello » 14 Fév 2013, 00:47

Salut l'ami !

Solution pleinement fonctionnelle !

J'ai rajouté dans mon script une nouvelle variable "$unitaire_price_discount" après "$total_price = floatval($total_price);" pour reformater et afficher le prix unitaire avec l'espace comme séparateur des milliers.

$unitaire_price_discount = number_format(round($total_price, 2), 2, ',', ' ');

Puis affichage : echo sprintf($text_discount, $discount['quantity'], $upc, $total_price_discount, $unitaire_price_discount, $upc_article);

Voici le code intégral du sujet concerné rajouté dans mon fichier de template "product.tpl" :
Code: Tout sélectionner
  <?php if ($discounts) { ?>
        <br />
        <div class="discount">
        <?php foreach ($discounts as $discount) { ?>
           
        <?php 
               
$total_price = $discount['price'];
$total_price = str_replace('.','',$total_price);
$total_price = substr($total_price,0,strpos($total_price,',')+3);
$total_price = str_replace(',','.',$total_price);
$total_price = floatval($total_price);

$unitaire_price_discount = number_format(round($total_price, 2), 2, ',', ' ');
$unitaire_price_discount .= ' &#128;';

$total_price = $total_price * $discount['quantity'];
$total_price = number_format(round($total_price, 2), 2, ',', ' ');
$total_price .= ' &#128;';
$total_price = "\n $total_price\n\n";
$total_price_discount = $discount['price'];
$total_price_discount = substr($total_price_discount,0,strpos($total_price_discount,',')+3);
$total_price_discount = str_replace(',','.',$total_price_discount);
$total_price_discount = floatval($total_price_discount);
$total_price_discount = $total_price_discount * $discount['quantity'];
$total_price_discount = number_format(round($total_price_discount, 2), 2,',', ' ');
$total_price_discount .= ' &#128;';
$total_price_discount = "\n $total_price\n\n";
 
        echo sprintf($text_discount, $discount['quantity'], $upc, $total_price_discount, $unitaire_price_discount, $upc_article); ?><br />

        <?php } ?>
        </div>
        <?php } ?>

Mister Malaiac, dois-je te renvoyer une nouvelle caisse de considération ?

PS :
fais gaffe quand meme que les divisions / multiplications doivent pas être faites comme il faut à un moment, car le prix du litre augmente avec la quantité ...

Je ne vois pas bien dans quel contexte Le prix du litre augmente OU AUGMENTERAIT avec la quantité ...?
Le prix du litre diminue quand les quantités commandées croissent, comme il se doit !
Je ne change rien à l'ordre des évènements dans la progression du script "divisions / multiplications" !
Opencart : Version 1.5.4.1 + extension langue french
Hébergeur(s) : Planethoster pour un site et O2switch pour un autre site
PHP Version 5.3.19 pour les deux hébergements
Template installé : Satsuma 1.5 orange theme identique à lime green thème, couleur dominante mise à part.

Il vaut mieux un qui sait que cent qui cherchent !
mariobello
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 53
Inscription: 23 Déc 2012, 19:23


Retourner vers Soutien Général

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 1 invité

cron