2010-11-06 6 views
0

Je suis en train de send a number d'une page à une autre sur afin de l'enregistrer sur ma base de données, mais quand je l'utilise number_format méthode le nombre est converti en 0:PHP: Conversion d'un nombre variable d'URL pour un certain nombre

<?php 
    $_REQUEST["myNumber"]; // the number from the url is 25%2C8 (25,8) 
    // why this returns 0? 
    number_format (urlencode($_REQUEST["myNumber"]), 2, ".", ""); 
?> 

Je pensais que la fonction urlencode était utile pour convertir les numéros d'URL en numéros de chaîne, où est ma faute?

Répondre

2

Vous devez utiliser la fonction urldecode au lieu de l'urlencode si vous souhaitez décoder les caractères. Et passez ',' comme pointeur décimal.

Donc, votre code devrait ressembler à ceci:

number_format (urldecode($_REQUEST["myNumber"]), 2, ",", ""); 

Mais vous devez prendre en compte pour que les variables $ _POST \ GET \ Les tableaux de demande est déjà décodées. Peut-être, votre code peut être encore plus simple:

number_format ($_REQUEST["myNumber"], 2, ","); 
+0

+1 pour mentionner qu'il utilise un séparateur décimal non standard (c'est-à-dire localisé) –

+0

Merci pour votre aide, je suis italien et les numéros italiens sont habituellement représentés avec "," comme séparateur décimal. – vitto

0

number_format attend un certain nombre (float, pour être exact) comme premier argument et le '25,8' ne sera pas reconnu comme flottant. Vous auriez besoin de faire quelque chose comme:

str_replace(',','.', $_REQUEST["myNumber"]); // '25,8' --> '25.8' 

convertir un seul virgule pour une chaîne qui peut être évaluée comme nombre décimal (qui peut être stocké dans db).

Course à pied:

print number_format('25,8', 2); 

retours 25.00 qui n'est pas 25.80 (que je suppose est le résultat souhaité).