[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 ;)
A voir également:
- [PHP] Addition de variable
- Addition excel - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
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
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