Problème de résultat

Petit nouveau ! | 5 Messages

30 oct. 2008, 23:24

J'ai un problème de résultat pour un caclul.

Pour résumé, j'ai un formulaire dont je vais récupérer les informations pour un calcul :
// Calcul ressources Mine de métal

function mdmm($niveau)  // Métal
{ 
   $mdm_metal = number_format(60 * pow(1.5, ($niveau - 1)), 0, ',', ' '); 
   return $mdm_metal; 
} 

function mdmc($niveau) // Cristal
{ 
   $mdm_cristal = number_format(15 * pow(1.5, ($niveau - 1)), 0, ',', ' '); 
   return $mdm_cristal; 
} 

$mdm_metal = mdmm($_POST['niveauf']); 
$mdm_cristal = mdmc($_POST['niveauf']);


// Récupération des information du formulaire + à afficher

$metal_actuel = number_format($_POST['fmetal'], 0, ',', ' ');;
$cristal_actuel = number_format($_POST['fcristal'], 0, ',', ' ');;
$deuterium_actuel = number_format($_POST['fdeuterium'], 0, ',', ' ');;

$metal_a_envoyer = number_format((($mdm_metal - $metal_actuel), 0, ',', ' ');
$cistal_a_envoyer = number_format(($mdm_metal - $cristal_actuel), 0, ',', ' ');


// Affichage du résultat

echo "<strong>Mine de m&eacute;tal :</strong><br /><br />";
echo "<strong>Plan&egrave;te :</strong> $planete<br />";
echo "Metal : $mdm_metal<br/>";
echo "M&eacute;tal actuel : $metal_actuel<br />";
echo "M&eacute;tal &agrave; envoyer : $metal_a_envoyer<br />";
echo "Cristal : $mdm_cristal<br />";
echo "Cristal actuel : $cristal_actuel<br />";
echo "Cristal &agrave; envoyer : $cistal_a_envoyer<br />";

Mais j'ai un problème avec un résultat à afficher, en fait . il s'agit de $metal_a_envoyer et de $metal_a_envoyer. Un petit exemple :

$mdm_metal = 127 000
$metal_actuel = 21 000
Résultat afficher pour $metal_a_envoyer : 106 (alors qu'il devrait afficher 106 000).


Je ne comprends pas où est mon erreur, cela fait depuis un moment que je cherche (je débute :) ). Pourriez-vous m'aider?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

30 oct. 2008, 23:46

$metal_a_envoyer = number_format((($mdm_metal - $metal_actuel), 0, ',', ' ');
une parenthèse en trop tu as ;)

Corrigé :
$metal_a_envoyer = number_format(($mdm_metal - $metal_actuel), 0, ',', ' ');

Petit nouveau ! | 5 Messages

31 oct. 2008, 00:06

Avec
$metal_a_envoyer = number_format(($mdm_metal - $metal_actuel), 0, ',', ' '); // pour mine de métal seulement
$cistal_a_envoyer = number_format(($mdm_metal - $cristal_actuel), 0, ',', ' '); // pour mine de métal seulement
J'ai toujours le même résultat :oops:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 oct. 2008, 00:07

Que te donne juste ce code ?
<?php
$mdm_metal = 127000;
$metal_actuel = 21000;
$metal_a_envoyer = number_format(($mdm_metal - $metal_actuel), 0, ',', ' ');
echo $metal_a_envoyer;
?>

Eléphant du PHP | 353 Messages

31 oct. 2008, 00:12

en mettant ceci :
$mdm_metal = 127000; 
$metal_actuel = 21000;//number_format($_POST['fmetal'], 0, ',', ' ');;
j'obtiens bien 106 000.
Donc..
Bizzare.
Il serait donc pratique que tu nous dise ce qui t'es exactement retourné par le code de charabia.


PS : Rah les ogame like :x

Petit nouveau ! | 5 Messages

31 oct. 2008, 00:14

Ca fonctionne (dans un nouveau document). Je copie et colle dans ma page et j'ai toujours le même résultat :oops:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 oct. 2008, 00:16

Que rentres-tu comme donnée pour le champ niveauf de ton formulaire ?

Petit nouveau ! | 5 Messages

31 oct. 2008, 00:16

par exemple "21".

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 oct. 2008, 00:24

En fait lorsque tu utilises number_format, les 2 paramètres $mdm_metal et $metal_actuel doivent être des nombres pour que ça fonctionne.

Or $mdm_metal est transformé par la fonction "mdmm". Par exemple si tu rentres 21000 tu auras en sortie 21 000. C'est donc l'espace créé qui pose problème et c'est pour ça que $metal_a_envoyer n'est que la soustraction de ce qu'il y a à gauche de l'espace, d'où le résultat 106 au lieu de 106 000.

Il ne faut donc pas utiliser number_format pour un résultat que tu vas utiliser dans un autre number_format comme c'est le cas maintenant.

Petit nouveau ! | 5 Messages

31 oct. 2008, 00:33

D'accord, merci pour les infos, je vais modifier cela et je teste d'ici demain matin.

Je modifie mon code et test, ensuite je mettrai que le problème est reglé, en espérant que je ne fasse pas d'autres erreurs.

En tout cas, merci pour l'aide, c'est sympa :)