[PHP] Addition de variable
Résolu
Skymaster
-
Skymaster -
Skymaster -
Bonjour,
Je tente dans un fichier d'additionner 2 variables mais rien n'y fait.
Pour sécuriser un peu, je veux que mon code pin soit additionner avec un numéro de carte de fidélité pour donner le codepin sécurisé !
$add1 = $_POST['codepin'];
$add2 = $_POST['cartefid'];
$codepin = $add1 + $add2;
Quand je met en codepin : 1981 par exemple et en cartefid : 1111111111111, j'obtiens :
1111111113090 au lieu de 3092 à la fin.
Si le dernier chiffre dépasse 5, c'est arrondi au supérieur et si le dernier chiffre est en dessous de 5, c'est arrondi à l'inférieur.
J'ai trouvé sur pas mal de forum des fonctions pour arrondir mais pas pour annuler l'arrondi automatique ;)
Je tente dans un fichier d'additionner 2 variables mais rien n'y fait.
Pour sécuriser un peu, je veux que mon code pin soit additionner avec un numéro de carte de fidélité pour donner le codepin sécurisé !
$add1 = $_POST['codepin'];
$add2 = $_POST['cartefid'];
$codepin = $add1 + $add2;
Quand je met en codepin : 1981 par exemple et en cartefid : 1111111111111, j'obtiens :
1111111113090 au lieu de 3092 à la fin.
Si le dernier chiffre dépasse 5, c'est arrondi au supérieur et si le dernier chiffre est en dessous de 5, c'est arrondi à l'inférieur.
J'ai trouvé sur pas mal de forum des fonctions pour arrondir mais pas pour annuler l'arrondi automatique ;)
Configuration: Windows XP Firefox 3.5.7
2 réponses
-
Bonjour
Ce n'est pas un arrondi automatique, c'est un manque de précision dans les calculs. Tu fais un calcul sur 13 chiffres significatifs, ce qui est à la limite des nombres standard du PHP (quoique la manuel dise 14).
Si tu sais qu'il n'y aura jamais de retenue au-delà du 6ème chiifre par exemple, tu peux découper cartefid en 2 tranches et faire l'addition sur les poids faibles, puis remettre bout à bout ...
$t1=substr($ad11,-6)); // extrait 6 chiffres poids faibles
$t1=$t1+$add2; // addition sans problème de précision
while (strlen($t1)<6) $t1 = '0'.$t1; // pour remettre les éventuels '0' qui ont disparu lors du passage en numérique
$codepin=substr($add1,0,strlen($add1)-6).t1; // on remet les deux morceaux ensemble
S'il y a une retenue (strlen($t1)>6) il faut l'intégrer dans la tranche de poids fort, ce qui n'est pas très compliqué non plus -