perl检查数字是否不是int不工作

Mar*_*iya 0 arrays int perl matrix floating

您好我有一个矩阵,其中包含浮点数和int数字我想以某种方式将其打印到文件中,如果它不是整数打印浮动后舍入为1的数值.以下是我的代码

use Scalar::Util::Numeric qw(isint);

    for ( $i = 0 ; $i < $#matrix ; $i++ ) {
    for ( $j = 0 ; $j < $#{ $matrix[0] } ; $j++ ) {
        if (not isint $matrix[$i][$j] ) {

            printf MYFILE ("%.1f",$matrix[$i][$j]{score});
        }
        else {
            print MYFILE $matrix[$i][$j]{score}.' ';
        }
    }
    print MYFILE "\n";
}
Run Code Online (Sandbox Code Playgroud)

问题是这个代码输出将所有内容都写为float,即使它是一个整数.怎么解决?

Tot*_*oto 7

这是我的评论 - >答案:

我猜$matrix[$i][$j]是因为$matrix[$i][$j]{score}在print语句中使用了对哈希的引用.所以它永远不是一个整体.

我做(有一些修复):

for ( my $i = 0 ; $i < $#matrix ; $i++ ) {
#   __^^
    for ( my $j = 0 ; $j < $#{ $matrix[$i] } ; $j++ ) {
    #                                __^^
        if (not isint $matrix[$i][$j]{score} ) {
        #                          __^^^^^^^
            printf MYFILE ("%.1f",$matrix[$i][$j]{score});
        }
        else {
            print MYFILE $matrix[$i][$j]{score}.' ';
        }
    }
    print MYFILE "\n";
}
Run Code Online (Sandbox Code Playgroud)

别忘了:

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

始终在所有脚本中.