7
votes

Vérifiez si un numéro est int ou float

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, xxx

mais le code ci-dessus ne fonctionnera pas pour 0,0,

Comment puis-je y parvenir?


1 commentaires

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?


7 Réponses :


16
votes

Ceci est une FAQ. Voir Comment puis-je déterminer si un scalaire est un nombre / tout / entier / flotteur?

Vous pouvez également utiliser scalaire :: util :: numérique .

intéressant, tandis que xxx

Prints int (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 à partir de 0,0 : xxx

sortie: xxx

Il me semble que le chèque devrait simplement regarder si le drapeau NOK 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.


2 commentaires

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'



8
votes
($Var - int($Var))?'float':'int'

1 commentaires

AVERTISSEMENT: Cela appellera une chaîne un "INT". Il valide les nombres mais cela ne garantit pas $ var est en réalité numérique.



1
votes

Vous pouvez utiliser AUTOBOX :: Universal Module Wich fait partie de AutoBox A >.

INTEGER
FLOAT


0 commentaires

0
votes

Perl5 retour vrai ou faux si une chaîne variable est un flotteur:

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


0 commentaires

0
votes

Pourquoi ne pas utiliser regex? XXX

RÉ-ÉDITÉ 2019-12-24 Pour fonctionner correctement dans Perl (MHN)


4 commentaires

[Remarque de l'examinateur]: J'ai formaté votre code et ajouté == opérateur de comparaison au lieu d'un seul = . 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!



0
votes

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> xxx pré>

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;
}


0 commentaires

0
votes

Cela devrait faire ce dont vous avez besoin: xxx pré>

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
        
}


0 commentaires