Bug sur addition :/ help

Petit nouveau ! | 2 Messages

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

Eléphant du PHP | 353 Messages

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 :)

Mammouth du PHP | 1339 Messages

16 avr. 2009, 11:33

Je virerai number_format
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 2 Messages

16 avr. 2009, 11:33

ok merci beaucoup !

Il faut donc que je vire mes number_format :/

Eléphant du PHP | 353 Messages

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: