Une simple soustraction qui ne se fait pas...

Résolu/Fermé
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 10 déc. 2013 à 12:53
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 10 déc. 2013 à 15:03
Bonjour,

Je prépare un script assez simple de détection d'opportunité d'achat / revente sur une plateforme de trading. Pour ça, je scrape un autre site pour connaître les offres de vente et d'achat, et je suis alertée si il existe une opportunité de revente d'un produit à un prix supérieur au prix d'achat. Jusque là tout fonctionne parfaitement.

Mais je dois intégrer à ça le calcul des frais de commissions en fonction des plateformes.
J'ai donc bien mes variables $prix_achat, $prix_revente, $plateforme_achat, $plateforme_vente, et j'ai par ailleurs $commission_achat, $commission_vente, grâce à un simple switch:

switch ($idpf_achat)
{
case "okpay": $commission_achat = '0,05'; break;
case 'virement-sepa-eu' : $commission_achat = '0'; break;
}


Le pb c'est que un echo $commission_achat m'affiche bien 0,034, mais lorsque je fais

$achat_net = $prix_achat - $prix_achat*$commission_achat;
echo "$achat_net = $prix_achat - $prix_achat*$commission_achat ";

ça m'affiche 706 = 706,45 - 706,45 * 0,034...

Le calcul ne se fait pas, pourquoi?? Ca me dépasse, est-ce que quelqu'un comprend d'où ça peut venir? (je précise que $achat_net devrait être égal à 682,43)

Merci d'avance pour votre aide !

A voir également:

7 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
Modifié par ThEBiShOp le 10/12/2013 à 13:02
Salut,

ta ligne :
echo "$achat_net = $prix_achat - $prix_achat*$commission_achat ";


affiche simplement un chaine de caractère, pour la comprendre, elle est exactement équivalente à ceci :

echo $achat_net.' = '.$prix_achat.' - '.$prix_achat.'*'.$commission_achat;


C'est donc absolument normal qu'aucun calcul ne se fasse et que tu affiches juste la ligne telle quelle.

Ceci :
echo $achat_net = $prix_achat - $prix_achat*$commission_achat;

Devrait t'afficher le résultat par contre.
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
10 déc. 2013 à 13:54
Au contraire, le calcul devrait déjà être fait au stade de echo, la variable $achat_net a été calculée à la ligne précédente (c'est juste pour vérifier les diférentes valeurs que je me suis contentée de recopier la formule dans le echo).
Et si je fais

echo $achat_net = $prix_achat - $prix_achat*$commission_achat;
ça m'affiche 706 = 706 - 0, donc ça ne change rien.

Je me demandais si ce n'était pas lié à un problème de formatage à un niveau ou un autre, parce que si on arrondit 0,034, en effet, ça donne 0 et ça justifie le résultat. Sauf que

$commission_achat = number_format($commission_achat, 4, ',', ' ');
echo $commission_achat;
me donne 0,0000.
0
Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
10 déc. 2013 à 13:58
Génial, voilà qui va stabiliser les bourses mondiales ^^

Le Trading haute fréquence c'est le mal...

bon -> []
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
10 déc. 2013 à 14:00
(je voulais juste dire que je n'attendais pas du echo qu'il me fasse le calcul, je me suis peut-être mal exprimée! :-) )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
10 déc. 2013 à 14:01
Non.

Que tu aies fais ton calcul avant ou pas n'y changera strictement rien...

echo  $achat_net = $prix_achat - $prix_achat*$commission_achat;


Affiche le résultat.

echo  "$achat_net = $prix_achat - $prix_achat*$commission_achat";


Affiche l'opération de la façon dont je l'ai décrite au dessus.

Tu as l'air sûre de toi, alors j'ai vérifié, malgré que c'était inutile.

Je ne sais pas ce que tu as fait ou ce que tu n'as pas fait, mais mon explication est la bonne.
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
10 déc. 2013 à 14:20
Pardon si je me suis mal exprimée, la seule chose dont je sois sûre c'est que le problème ne vient pas de là, puisque la variable $achat_net à ce stade est connue et devrait être affichée avec ta formule comme avec la mienne.
Ce que démontre ta formule montre par contre, c'est que $prix_achat*$commission_achat = 0, alors que ça devrait faire 24,0193 puisque $prix_achat*$commission_achat affiche bien 706,45 * 0,034 dans ma formule (dont le but était uniquement de vérifier justement les valeurs prises en compte pour le calcul)
et c'est là qu'il y a un souci... D'où mon interrogation concernant le formatage, mais comme je ne comprends absolument pas cette erreur, je n'en ai aucune idée...

@Bruce Willix : rassure-toi, aucun trading haute fréquence en vue, au contraire, je ne trade qu'une fois par jour voire tous les 2 ou 3 jours, mon script me permet simplement d'éviter de passer mes journées collée à l'écran pour guetter les marges, rien d'autre, et il n'investit même pas à ma place. :-)
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
Modifié par ThEBiShOp le 10/12/2013 à 14:32
Quand je pose ça :
$achat_net;
$prix_achat = 706.45;
$commission_achat = 0.034;

$achat_net = $prix_achat - $prix_achat*$commission_achat;
echo  "$achat_net = $prix_achat - $prix_achat*$commission_achat";

J'obtiens bien le bon résultat.
Avec le fragment de code que tu donnes, difficile d'en savoir plus.
0
Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
10 déc. 2013 à 14:40
Alors conseil de ma part: empoche ton bénef et fuis ^^ Les petits acteurs (et par petits acteurs, je parle principalement de nous, mais aussi des entreprises et des états) vont être les grands pigeons des marchés boursiers dans le futur. Ton script et ton cerveau n'ont absolument aucune chance face aux ordinateurs d'Hudson Street :D
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
10 déc. 2013 à 14:50
Malheureusement, je n'ai pas plus d'éléments que ceux que j'ai déjà donnés...
J'ai des variables connues et un calcul qui manifestement considère d'un seul coup comme nulle une des variables alors qu'à la ligne d'avant c'était ok, et ça me dépasse, j'avoue, je ne vois pas du tout quel type de cause peut générer ce genre d'erreur... :'-(

@Bruce Willix : je ne suis pas en danger, parce que je ne fais que des opérations instantanées d'achat / revente, je ne spécule pas. S'il y a une opportunité, je la saisis, sinon je ne bouge pas, mais le risque est nul. :-)
Par contre, est-ce que c'est le mal, là c'est un autre débat... :-)
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
10 déc. 2013 à 14:57
Moi non plus, je ne vois pas, vu que tu ne m'as donné qu'un infime fragment de ton code qui n'explique absolument pas ce qui se passe :)

Je ne pense pas que ça vienne de là, mais traite tes variables numériques comme telle, et pas comme des chaines.
$var = 0.5; // $var est un float
$var = '0.5'; // $var est une chaine

Le fragment que tu montres indique que $commission_achat peut être de '0.05' ou de '0' et ensuite tu nous dis comme si de rien n'était que ça vaut 0.034. Difficile à suivre...
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
10 déc. 2013 à 15:03
Le problème est résolu !
Il ne venait pas du code, mais du fait que les valeurs récupérées étaient du type "0,034" et non "0.034", donc c'était un pb de formatage, tout simplement.
C'est quand j'ai vu les valeurs sur ton test que ça m'a sauté aux yeux, donc merci!! :-)

(pardon pour les valeurs changeantes, comme mon script récupère des valeurs en temps réel, ça bouge, et je n'ai pas toujours pensé à remettre les valeurs du début pour que tu puisses suivre)
0