我正在使用 perl 生成一个元素数组,这些元素排列为单个制表符分隔的行。但是,我的数组中只有一部分是这样的。其他部分打印为单独的行。
以下是代码的相关部分。
它是一个 foreach 循环,其中for
嵌入了三个条件循环。该命令在四种不同的/条件下push
使用了四次。我遇到问题的特定数组称为. 在开头附近定义了几个变量,可以忽略。我不认为这些是问题。if
else
@imputed_positions
$distance
当变量为时,我得到的输出正确打印为单行> 1
,即使这些值由 push 命令的 3 个单独实例(前三个)处理。$distance 的值和浮点值$distance
都> 1
打印为单行。当$distance
是< 1
或= 1
时,它们被打印为单独的行。这些行对应于由四个推送命令中的最后一个推送到 @imputed_positions 的元素。
我无法识别“类似问题”中的类似问题,这可能是因为我对问题所在没有足够精确的线索。
谢谢!!!
foreach my $distance ( @distances ) {
if ( $distance > 1 &&
( int ( $distance ) != $distance ) ) { ###just asking whether $variable is an integer and whether it is > than 1.
my $rounded_up = rounding_up( $distance );
my $rounded_down = rounding_down( $distance );
my $up_distance = $distance/$rounded_up;
my $down_distance = $distance/$rounded_down;
my $abs_up = abs ( 1 - $up_distance );
my $abs_down = abs ( 1 - $down_distance );
if ( $abs_up < $abs_down ) {
for ( my $i = 0; $i < $rounded_up; $i++ ) {
push ( @imputed_positions, "IMP!$up_distance!A\tIMP!$up_distance!D\tIMP!$up_distance!I\t" );
}
}
else {
for ( my $i = 0; $i < $rounded_down; $i++ ){
push ( @imputed_positions, "IMP!$down_distance!A\tIMP!$down_distance!D\tIMP!$down_distance!I\t" );
}
}
}
else {
if ( $distance > 1 ){
for ( my $i = 1; $i <= $distance; $i++ ) {
push ( @imputed_positions, "IMP!1!A\tIMP!1!D\tIMP!1!I\t" );
}
}
else {
push ( @imputed_positions, "IMP!$distance!A\tIMP!$distance!D\tIMP!$distance!I\t" );
}
}
}
#print @imputed_positions;
#rounding down subroutine
sub rounding_down {
my ( $round_me ) = @_;
my $rounded_down = int( $round_me );
return $rounded_down;
}
#rounding up subroutine
sub rounding_up {
my ( $round_me ) = @_;
my $rounded_up = int( $round_me ) + 1;
return $rounded_up;
}
如果我解释输入可能会有所帮助。@distances 只是一个 txt 文件,其中每一行都是一个数字。数字都是正数,可以是 0、整数或浮点数。例如,@distance = ( 1, 3, 5.9999, 4.9, 3.1, 3.000001, 0, 0, 0.3 )
。
当@distance
包含上述元素时,输出不会打印为单行,而是如下所示:
IMP!1
!A IMP!1
!D IMP!1
!I IMP!1!A IMP!1!D IMP!1!I IMP!1!A IMP!1!D IMP!1!I IMP!1!A IMP!1!D IMP!1!IIMP!0.999999998333333!A IMP!0.999999998333333!D IMP!0.999999998333333!I IMP!0.999999998333333!A IMP!0.999999998333333!D IMP!0.999999998333333!I IMP!0.999999998333333!A IMP!0.999999998333333!D IMP!0.999999998333333!I IMP!0.999999998333333!AIMP!0.999999998333333!D IMP!0.999999998333333!I IMP!0.999999998333333!A IMP!0.999999998333333!D IMP!0.999999998333333!I IMP!0.999999998333333!A IMP!0.999999998333333!D IMP!0.999999998333333!I IMP!0.98!A IMP!0.98!D IMP!0.98!I IMP!0.98!A IMP!0.98!D IMP!0.98!I IMP!0.98!A IMP!0.98!D IMP!0.98!I IMP!0.98!A IMP!0.98!D IMP!0.98!I IMP!0.98!A IMP!0.98!D IMP!0.98!I IMP!1.03333333333333!A IMP!1.03333333333333!D IMP!1.03333333333333!I IMP!1.03333333333333!A IMP!1.03333333333333!D IMP!1.03333333333333!I IMP!1.03333333333333!A IMP!1.03333333333333!D IMP!1.03333333333333!I IMP!1.00000003333333!A IMP!1.00000003333333!D IMP!1.00000003333333!I IMP!1.00000003333333!A IMP!1.00000003333333!D IMP!1.00000003333333!I IMP!1.00000003333333!A IMP!1.00000003333333!D IMP!1.00000003333333!I IMP!0
!A IMP!0
!D IMP!0
!I IMP!0
!A IMP!0
!D IMP!0
!I IMP!0.3
!A IMP!0.3
!D IMP!0.3
!I