Можно создать дубликат:
How do I fix this Perl code so that 1.1 + 2.2 == 3.3?вопросы сравнения Поплавок в Perl
Я работаю над сценарием Perl, который сравнивает строки, представляющие модели генных и печатает резюме сравнения. Если модели генов соответствуют друг другу, я распечатываю очень краткое резюме, но если они разные, то резюме довольно многословно.
Сценарий рассматривает значение переменной, чтобы определить, должно ли оно делать краткое или подробное резюме - если переменная равна 1, она должна печатать краткую сводку; в противном случае он должен распечатать подробное резюме.
Поскольку значение является числовым (поплавок), я использовал оператор ==
для сравнения.
if($stats->{overall_simple_matching_coefficient} == 1)
{
print "Gene structures match perfectly!\n";
}
Это работало правильно для всех моих тестов и даже для большинства новых случаев я бегу, но я нашел странный случай, когда значение было равно 1, но выше сравнение не удалось. Я не смог понять, почему сравнение не удалось, и еще страннее, когда я сменил оператора ==
на оператора eq
, он, казалось, работал нормально.
Я думал, что ==
был для численного сравнения и eq
был для сравнения строк. Я что-то упустил?
Update: Если я распечатать значение перед сравнением ...
printf("Test: '%f', '%d', '%s'\n", $stats->{overall_simple_matching_coefficient}, $stats->{overall_simple_matching_coefficient}, $stats->{overall_simple_matching_coefficient});
... Я получаю это.
Test: '1.000000', '0', '1'
Что вы получаете, если вы печатаете значение '$ stats -> {general_simple_matching_coefficient}' непосредственно перед сравнением? –
О, я на самом деле делал это раньше. Спасибо, я все это подниму. –
Не уверен в perl, не используйте его так много, но в bash хотя бы '==' для строк и '-eq' для численных ... –