IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

teste d'un nombre decimale


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut teste d'un nombre decimale
    Bonjour,

    un soucis s'offre à moi. Ca a l'air plutôt bête, mais je bloque.

    Je dois faire en sorte de tester si un nombre est correct, donc sans lettre alpha et que le zero soit exclu, mais [0.01-0.99] autorisé. Qui accepte 2 décimales (pas plus), et qui, si un utilisateur rentre une virgule, ca le transforme en point.

    Pour le moment, ma fonction n'accepte pas les [0.01-0.99], et n'a pas de limite de décimales ...

    Et la je bloque. De l'aide serait la bienvenue, merci à vous

    PS : ma fonction n'est pas forcement propre, désolé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function int_to_dec($nb) {	
    	 if (intval($nb) == 0) // Empeche 0 mais aussi 0.01 à 0.99
    		return -1;
    	 if (preg_match("/,/",$nb)) { // remplace la "," par "."
    		$res = explode(",",$nb);	
    		$unit = intval($res[0]);
    		$dec = intval($res[1]);
    		return ($unit + ($dec/10));		
    	} elseif (is_numeric($nb)) { // refuse les char alpha
    		return ($nb);
    	} else { //cas d'erreur
    		return -1;
    	}
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise plutot une expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $chaine = str_replace(",", ".", $chaine);
    if (preg_match("#^[0-9]+\.[0-9]{1,2}$#", $chaine) {
     echo "c'est bon";
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Par contre, si on tape "1" ca ne passera pas

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #^[0-9]+(\.[0-9]{1,2}){0,1}$#
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Hum la, j'ai pas tester, mais je pige pas ca : "{0,1}" à la fin. Mais soit ca sera un nb à virgule, soit ca sera 0 ou 1.

    Moi ce que je veux c'est nb a virgule, ou entier autre que 0.

    exemple :
    0.16
    2.5
    1
    8.56
    15
    etc ...

    Par contre le soucis avec preg_match c'est que ca converti pas la string en decimale pour ma BDD

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu ne dépasses pas 1 tu peux restreindre à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #^[0-1](\.[0-9]{1,2}){0,1}$#
    {0,1} ca signifie aucune fois ou 1 fois
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function int_to_dec($nb){
    	$chaine=str_replace(',','.',(string)$nb);
    	if(preg_match('/^([1-9]+|\d+\.\d{1,2})$/',$chaine,$tab)){
    		if($tab[1]>0)return $tab[1];
    	}
    	return -1;
    }
     
    echo int_to_dec(0);	// -1 (refusé)
    echo int_to_dec('0.0');	// -1 (refusé)
    echo int_to_dec('0,5');	// 0.5
    echo int_to_dec(1);	// 1
    echo int_to_dec(3.14);	// 3.14

  8. #8
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Merci Eric2a, cela fonctionne presque, je ne peux pas mettre de dizaines/centaines/milliers. Par contre j'arrive pas a visualisé le contenu de $tab[1] :$


    Sabotage, là, le 0 passait a travers :s Mais merci quand même

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je crois qu'effectivement il faut ajouter un test en PHP, parce qu'eliminer 0 et 0.0 et 0.00 ca devient lourd.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Ah bon, tu accouche d'un monstre ?

    J'ai reussi a modifier pour que cela fonctionne à la perfection pour mon cas (je crois)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function int_to_dec2($nb){
    	$chaine=str_replace(',','.',(string)$nb);
    	if(preg_match('/^([1-9][0-9]+|\d+\.\d{1,2})$/',$chaine,$tab)){
    		if($tab[1]>0)return $tab[1];
    	}
    	return -1;
    }

  11. #11
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par Rian83
    je ne peux pas mettre de dizaines/centaines/milliers... J'ai reussi a modifier pour que cela fonctionne
    Bien vu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test d'un nombre decimal
    Par francis_tom dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 31/07/2009, 14h53
  2. [E-03] Faire un test sur le nombre de document ouvert
    Par Tinien dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/03/2009, 16h42
  3. Test sur un nombre pair
    Par Maxence45 dans le forum Scheme
    Réponses: 18
    Dernier message: 08/02/2008, 22h33
  4. Partie entier d'une nombre decimale
    Par Andry dans le forum SQL
    Réponses: 3
    Dernier message: 24/01/2008, 20h50
  5. Test sur un nombre entier ou pas
    Par coco38 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2007, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo