Здравствуйте, у меня есть матрица, которая содержит числа с плавающей запятой и числа 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";
}
Проблема в том, что этот вывод кода записывает все как число с плавающей запятой, даже если это целое число. Как это исправить?
printf
.%f
— это спецификатор формата для чисел одинарной точности с плавающей запятой. - person Hunter McMillen   schedule 11.09.2013$i < $#matrix
остановит один конец вашего массива. Вам нужно$i < @matrix
или$i <= $#matrix
.$#matrix
— это номер последнего элемента. Кроме того, более Perlish способ написать это (и проще)for my $i (0 .. $#matrix)
. - person TLP   schedule 11.09.2013$matrix[$i][$j]{score}
используется в операторе печати. Так что это никогда не int. - person Toto   schedule 11.09.2013