【问题标题】:perl checking if a number is not int not workingperl 检查一个数字是否不是 int 不起作用
【发布时间】:2013-09-11 12:42:13
【问题描述】:

您好,我有一个包含浮点数和整数的矩阵,如果它不是整数,我想以某种方式将其打印到文件中,在浮点数之后将值四舍五入为 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";
}

问题是这个代码输出把所有的东西都写成浮点数,即使它是一个整数。 如何解决?

【问题讨论】:

  • @matrix 的内容是什么?
  • 它以浮点格式输出,因为您在 printf 语句中告诉它。 %f 是单精度浮点数的格式说明符。
  • 条件$i &lt; $#matrix 将在您的数组末尾处停止。您需要$i &lt; @matrix$i &lt;= $#matrix$#matrix 是最后一个元素的编号。此外,写这个(更简单)的更 Perlish 方式是for my $i (0 .. $#matrix)
  • 第一行为 0,其余为浮点数、整数和 0
  • 我猜 `$matrix[$i][$j]` 是对哈希的引用,因为在 print 语句中使用了$matrix[$i][$j]{score}。所以它永远不是 int。

标签: arrays perl matrix int floating


【解决方案1】:

这是我的评论 --> 答案:

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

我会做(有一些修复):

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

别忘了:

use strict;
use warnings;

在所有脚本中,始终如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2014-02-20
    • 2011-02-16
    • 2015-03-31
    相关资源
    最近更新 更多