【发布时间】: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 < $#matrix将在您的数组末尾处停止。您需要$i < @matrix或$i <= $#matrix。$#matrix是最后一个元素的编号。此外,写这个(更简单)的更 Perlish 方式是for my $i (0 .. $#matrix)。 -
第一行为 0,其余为浮点数、整数和 0
-
我猜 `$matrix[$i][$j]` 是对哈希的引用,因为在 print 语句中使用了
$matrix[$i][$j]{score}。所以它永远不是 int。
标签: arrays perl matrix int floating