Bug sur addition :/ help

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bug sur addition :/ help

par yaug » 16 avr. 2009, 11:34

Ou alors tu décales ton number format.
Utilise le pour afficher le résultat après avoir fait le calcul.

:wink:

par skyinho » 16 avr. 2009, 11:33

ok merci beaucoup !

Il faut donc que je vire mes number_format :/

par Elie » 16 avr. 2009, 11:33

Je virerai number_format

par yaug » 16 avr. 2009, 11:30

C'est simple

Tu utilise des nombres à virgules, ce que PHP ne comprend pas.

Quand il voit 1,280, il considère cela comme un string.
Il fait donc un transptypage en integer.
Hors transtyper 1,280 en entier donne 1

voila pourquoi tu as un soucis.
Utilise des nombres sans virgules pour tes calculs :)

Bug sur addition :/ help

par skyinho » 16 avr. 2009, 11:26

Bonjour,

Actuellement en stage, je rencontre un bug plus qu'étrange sur un programme...

Une boucle récupère des valeurs numériques et en fait la somme, en gros...seulement lors d'un passage, le programme ajoute 1 au lieu de la valeur souhaitée...

Là je deviens un peu dingue, donc si quelqu'un sait d'où ça peut venir, je vous couvre de remerciements par avance !

Pour être plus clair voici le bout de code :
foreach($this->invoicestim[$estim['devis']]['echeances'] as $idech => $ech)
{
echo "<br/>ECHEANCE ".$idech."<br/>";

if(substr($ech['ech_date'],0,4) == $annee)
{
if ($ech['sigle'] == '+' && $ech['ech_encash'] != 2 && $ech['ech_encash'] != 3)
{
$val = number_format($ech['ech_montant'],2);

echo "<br/>ANCIEN MONTANT ".$this->montant_total."<br/>";
echo "<br/>MODIF : + ".$val."<br/>";
echo 2*$val;

$this->invoicestim[$estim['devis']]['echeances']['montant_actuel'] += $val;
$this->montant_total += $val;
echo "<br/>NOUVEAU MONTANT ".$this->montant_total."<br/>";
echo "<br/><br/>";
}
}
et son résultat :
ECHEANCE 5110

ANCIEN MONTANT 0

MODIF : + 640.00
1280
NOUVEAU MONTANT 640



ECHEANCE 6786

ANCIEN MONTANT 640.00

MODIF : + 640.00
1280
NOUVEAU MONTANT 1280



ECHEANCE 6787

ANCIEN MONTANT 1,280.00

MODIF : + 640.00
1280
NOUVEAU MONTANT 641



ECHEANCE 12003

ANCIEN MONTANT 641.00

MODIF : + 320.00
640
NOUVEAU MONTANT 961