Une simple soustraction qui ne se fait pas...
Résolu
ephelya
Messages postés
282
Date d'inscription
Statut
Membre
Dernière intervention
-
ephelya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
ephelya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
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:
Le pb c'est que un echo $commission_achat m'affiche bien 0,034, mais lorsque je fais
ç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 !
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:
- Une simple soustraction qui ne se fait pas...
- Iphone 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
- Simple comic - Télécharger - Vie quotidienne
7 réponses
Salut,
ta ligne :
affiche simplement un chaine de caractère, pour la comprendre, elle est exactement équivalente à ceci :
C'est donc absolument normal qu'aucun calcul ne se fasse et que tu affiches juste la ligne telle quelle.
Ceci :
Devrait t'afficher le résultat par contre.
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.
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
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
Et si je fais
ça m'affiche 706 = 706 - 0, donc ça ne change rien.
echo $achat_net = $prix_achat - $prix_achat*$commission_achat;
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
me donne 0,0000.
$commission_achat = number_format($commission_achat, 4, ',', ' ');
echo $commission_achat;
Génial, voilà qui va stabiliser les bourses mondiales ^^
Le Trading haute fréquence c'est le mal...
bon -> []
Le Trading haute fréquence c'est le mal...
bon -> []
(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! :-) )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Non.
Que tu aies fais ton calcul avant ou pas n'y changera strictement rien...
Affiche le résultat.
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.
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.
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. :-)
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. :-)
Quand je pose ça :
J'obtiens bien le bon résultat.
Avec le fragment de code que tu donnes, difficile d'en savoir plus.
$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.
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
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... :-)
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... :-)
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.
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...
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...
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)
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)