dans Perl, je veux vérifier si la variable donnée contient un nombre de points flottant de non. Pour vérifier cela, j'utilise, mais le code ci-dessus ne fonctionnera pas pour 0,0, p> Comment puis-je y parvenir? P> p>
7 Réponses :
Ceci est une FAQ. Voir Vous pouvez également utiliser scalaire :: util :: numérique . P> intéressant, tandis que p> Prints sortie: p> Il me semble que le chèque devrait simplement regarder si le drapeau int code> (pas surprenant si vous regardez le code source), basé sur le commentaire de @ Tchrist, il devrait être possible de consulter les informations fournies dans la structure de variables pour distinguer
0 code > à partir de
0,0 code>: p>
NOK code> est défini. Cela me prend des âges pour écrire même les Xs les plus simples, donc je ne fournirai pas de mise en œuvre. P> p>
Vous devriez rechercher s'il y a un IV distinct d'un NV.
Avec des systèmes à base de glibc, vous pouvez distinguer: $ x eq - $ x? 'IV': 'nv' code>
($Var - int($Var))?'float':'int'
AVERTISSEMENT: Cela appellera une chaîne un "INT". Il valide les nombres mais cela ne garantit pas $ var code> est en réalité numérique.
Vous pouvez utiliser AUTOBOX :: Universal Module Wich fait partie de AutoBox A >. INTEGER
FLOAT
Vous devez rouler le vôtre en étant intelligent avec des dégustes avec des dégustes et des étuis de bord de la poignée, ou d'autres reporter à une bibliothèque 3ème partie et à la découverte et à la suppression des exceptions projetées. par eux. P>
0000100000011100000000 11111111111111111111
Pourquoi ne pas utiliser regex? RÉ-ÉDITÉ 2019-12-24 Pour fonctionner correctement em> dans Perl (MHN) P> P> P>
[Remarque de l'examinateur]: J'ai formaté votre code et ajouté == code> opérateur de comparaison au lieu d'un seul
= code>. Je ne suis pas un expert Perl, mais si j'ai fait quelque chose de mal, merci de me taguer dans le commentaire. à votre santé.
"==" n'est pas applicable ici à Perl. "= ~" est pour des expressions régulières, de sorte que vos modifications ne sont aucun effet. Voici un exemple: 1) en utilisant votre édition: $ perl -e '$ test = "123,45"; impression "est flottant \ n" si ($ test == ~ / - * \ d + \. \ D + /); [Pas de sortie !!!] 2) Utilisation de la syntaxe de perl correcte: $ perl -e '$ test = "123,45"; impression "est float \ n" si ($ test = ~ / - * \ d + \. \ D + /) ; ' Est float s'il vous plaît garder à l'esprit le langage de programmation utilisé avant de faire des modifications ;-)
Vous êtes totalement droit et désolé pour la ruée vers l'édition. aussi merci pour l'exemple
Pas de problème, Nika! Perl est une étrange bête pour dire le moins!
Je ne sais pas si vous souhaitez pêcher un numéro de la variable ou si vous souhaitez vérifier si la variable est (bien, peut être) un flotteur ou INT.
Cependant, pour construire sur l'exemple de regex ci-dessus, c'est la plupart correcte, moins un couple Tweaks. p> si le test est cependant ... p> XXX PRE> Essayez cela à la place: P> sub isInt{
return ($_[0] =~/^-?\d+$/)?1:0;
}
sub isFloat{
return ($_[0] =~/^-?\d*\.\d+$/)?1:0;
}
sub isNum{
return (isInt($_[0]) || isFloat($_[0]) )?1:0;
}
Cela devrait faire ce dont vous avez besoin: Si vous devez tester 0,00 dans votre application, vous pouvez utiliser: p> my $var = 0.00 # Floating point number
if ($var > int($var) || length($var) > length(int($var)) {
# is floating point number because int() always rounds down
# or string length is longer than integer string
}
Quelle est la bonne réponse à votre question dépend entièrement de la raison pour laquelle vous voulez savoir. Que comptez-vous faire différemment pour un numéro de point flottant?