Aller au contenu

Comment savoir si une variable est un nombre


Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, dans une routine, je cherche à savoir si une variable (qui peut, par erreur, contenir une chaine) est bien strictement supérieur à 0.

 

J'ai cherché et trouvé des trucs : (numberp, (null... Mais ça n'est pas suffisant.

 

Et ma traditionnelle demande :

 

Si quelqu'un a une astuce, un conseil... Je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut Patrick_35, et merci pour cette aide...

 

C'est exactement ce que je cherchais...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Re,

 

Voilà, j'ai fais plusieurs tests, mais ça ne fonctionne pas, voici ma routine "test" :

(defun c:testechelle ( / ech1)
 (setq ech1 200)
 (if (and (= (type ech1) INT) (> ech1 0)) ;_ Fin:and
   (princ "\nNombre strictement supérieur à 0")
   (princ "\nCe n'est pas un nombre ou inférieur ou égale à 0")
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Il manque un quote

(defun c:testechelle ( / ech1)
 (setq ech1 200)
 (if (and (= (type ech1) 'INT) (> ech1 0)) ;_ Fin:and
   (princ "\nNombre strictement supérieur à 0")
   (princ "\nCe n'est pas un nombre ou inférieur ou égale à 0")
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci Patrick_35... Mais j'ai du oublié une petite précision, le retour de cette variable est toujours sous forme de chaine, qui devrait contenir un nombre strictement supérieur à 0 (si l'utilisateur ne se trompe pas).

 

En fait, ech1 peut être "200", "gfsdg",... J'aimerais tester si sont "contenu" est bien un nombre strictement supérieur à 0.

 

C'est en regardant ton dernier code et en le testant que je me suis aperçu du manque d'information dans mon premier post... Désolé...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

 

J'ai cherché et trouvé des trucs : (numberp, (null... Mais ça n'est pas suffisant.

 

 

Bonjour,

 

Préfère numberp à type dans tes conditions, si tu ne veux pas te limiter aux nombres entiers..

Apprendre => Prendre => Rendre

Posté(e)

Tu ne lis pas ce qu'on te propose... grrr, je me demande pour qui je fais ça.

Ben si (enfin je pense), j'ai bien lu et compris que seul (type ne suffisait pas, et je ne savais absolument pas où chercher ce qui me manquait...

 

Alors la fonction READ est ton amie

BINGO ! ! C'est ça, et mon code est maintenant bon...

 

Préfère numberp à type dans tes conditions, si tu ne veux pas te limiter aux nombres entiers..

 

Merci Bruno, mais je cherche une échelle, donc, uniquement un integer...

 

Encore merci à tous...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

Il faut essayer d'être le plus précis possible dans l'énoncé de ce qu'on cherche à faire. Quand on y arrive, le boulot est quasiment fait, il suffit juste de traduire en LISP.

 

je cherche à savoir si une variable (qui peut, par erreur, contenir une chaine) est bien strictement supérieur à 0.

 

Finalement, il s'avère que la variable est toujours une chaîne qui peut représenter un nombre, ou pas. Mais on ne sait toujours pas précisément si ce nombre doit être un nombre entier ou peut être un nombre réel.

 

Autrement dit, est-ce que tu veux :

"évaluer si le contenu d'une chaîne de caractère représente un nombre strictement positif"

ou

"évaluer si le contenu d'une chaîne de caractère représente un nombre entier strictement positif"

ou autre chose ?

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut (gile).

 

Oui, tu as raison et je m'en excuse, je n'ai pas été assez claire dans mon premier post...

 

Je demande à l'utilisateur de saisir une échelle (juste le dénominateur) dans ta fonction "InputBox". C'est seulement après que j'ai percuté que le retour était toujours sous forme de chaine... D'où ma précision dans le message 7, je m'excuse encore pour cet oubli...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci Patrick_35... Mais j'ai du oublié une petite précision, le retour de cette variable est toujours sous forme de chaine, qui devrait contenir un nombre strictement supérieur à 0 (si l'utilisateur ne se trompe pas).

 

En fait, ech1 peut être "200", "gfsdg",... J'aimerais tester si sont "contenu" est bien un nombre strictement supérieur à 0.

 

C'est en regardant ton dernier code et en le testant que je me suis aperçu du manque d'information dans mon premier post... Désolé...

 

Salut

 

Dans ce cas regarde le post de (gile) sur les expressions régulières

http://cadxp.com/topic/45447-les-expressions-regulieres/page__view__findpost__p__263444

 

;; Test pour une chaire représentant un nombre réel positif

(RegExpTest varreelpositif "^\\d+(\\.\\d+)?$" T)

 

;; Test pour une chaire représentant un nombre entier positif

(RegExpTest varintpositif "^\\d+?$" T)

 

(ps: pas une le temps de regarder pour compléter l'expression et filtrer si la chaine est strictement positive, à compléter... :D )

 

A+ Bruno

Apprendre => Prendre => Rendre

Posté(e)

Je suis entièrement d'accord, mais j'ai OUBLIÉ que le retour de "InputBox" était toujours une chaine... J'étais concentré (en un mot) sur le contenu de la variable et non son format...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Pour un entier strictement positif, on peut utiliser le fait que atoi retourne 0 si la chaîne ne représente pas un nombre.

 

(while (not (< 0 (setq ech (atoi (getstring "\nEchelle: ")))))
 (alert "Nécessite un entier strictement positif")
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci (gile) pour cette précision... J'en prend note...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Pour un entier strictement positif, on peut utiliser le fait que atoi retourne 0 si la chaîne ne représente pas un nombre.

 

(while (not (< 0 (setq ech (atoi (getstring "\nEchelle: ")))))
 (alert "Nécessite un entier strictement positif")
)

 

Idem pour atof, bien joué :)

Apprendre => Prendre => Rendre

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité