Possible en double:
How do I fix this Perl code so that 1.1 + 2.2 == 3.3?questions de comparaison Float en Perl
Je travaille sur un script Perl qui compare les chaînes représentant des modèles de gènes et imprime un résumé de la comparaison. Si les modèles de gènes correspondent parfaitement, j'imprime un résumé très concis, mais s'ils sont différents, le résumé est assez verbeux.
Le script examine la valeur d'une variable pour déterminer si elle doit faire le résumé succinct ou verbeux - si la variable est égale à 1, elle doit imprimer le résumé concis; sinon, il devrait imprimer le résumé verbeux.
Comme la valeur est numérique (un flottant), j'ai utilisé l'opérateur ==
pour faire la comparaison.
if($stats->{overall_simple_matching_coefficient} == 1)
{
print "Gene structures match perfectly!\n";
}
Cela a fonctionné correctement pour tous mes tests et même pour la plupart des nouveaux cas je cours maintenant, mais je trouve un cas bizarre où la valeur était égale à 1, mais la comparaison ci-dessus a échoué. Je n'ai pas été en mesure de comprendre pourquoi la comparaison a échoué, et encore plus étrange, quand j'ai changé l'opérateur ==
à l'opérateur eq
, cela a semblé fonctionner correctement.
Je pensais que le ==
était pour la comparaison numérique et eq
était pour la comparaison de chaîne. Est-ce que j'ai râté quelque chose?
Mise à jour: Si j'imprimer la valeur juste avant la comparaison ...
printf("Test: '%f', '%d', '%s'\n", $stats->{overall_simple_matching_coefficient}, $stats->{overall_simple_matching_coefficient}, $stats->{overall_simple_matching_coefficient});
... Je reçois cela.
Test: '1.000000', '0', '1'
Que obtenez-vous si vous imprimez la valeur de '$ stats -> {overall_simple_matching_coefficient}' juste avant la comparaison? –
Oh, je le faisais en fait plus tôt. Merci, je vais mettre ça en place. –
Pas sûr de perl, ne l'utilisez pas beaucoup, mais dans bash au moins '==' est pour les chaînes et '-eq' est pour les numériques ... –