Perl - 小数乘法
Perl - multiply decimal
结果出来的时候,乘以(0.62),结果不对。但是,如果我将它乘以一个整数( 1 或 2 )就可以了。我该如何做小数乘法?
Input
*****
HEADER
GAME
BALL X1 ;
GOOD CATCH 1 5.6770 4.550 3.455 2.333 ;
END
END
Output
******
HEADER
GAME
BALL X1 ;
GOOD CATCH 1 3.5197.4 2.821 2.1421 1.4464.6 ;
END
END
use strict ;
sub multiply {
my ( $str ) = @_;
$str =~ s/(GOOD CATCH.*?;)/_multiply()/ge;
return $str;
}
sub _multiply {
my ( $str ) = @_;
$str =~ s/(\d\d+)/_mul_number()/ge;
return $str;
}
sub _mul_number {
my ($num) = @_;
return $num * 2;
}
正则表达式 $str =~ s/(\d\d+)/_mul_number()/ge;
查找 (\d\d+)
,它将匹配两个或更多数字的序列,但不匹配小数点。对于十进制数,它会将它们视为两个单独的数字;例如,给定“12.34”,它将分别处理“12”和“34”,得到“7.44”和“21.08”,最终结果为“7.44.21.08”。这可能不是你想要的。
为了处理输入中的小数,您需要扩展正则表达式以匹配它们。一个简单的可能性是 ([\d.]+)
,即:$str =~ s/([\d.]+)/_mul_number()/ge;
一个更复杂的正则表达式也可以确保最多有一个小数点(拒绝“12.34.56”)或允许 +
and/or -
正负符号数字。
结果出来的时候,乘以(0.62),结果不对。但是,如果我将它乘以一个整数( 1 或 2 )就可以了。我该如何做小数乘法?
Input
*****
HEADER
GAME
BALL X1 ;
GOOD CATCH 1 5.6770 4.550 3.455 2.333 ;
END
END
Output
******
HEADER
GAME
BALL X1 ;
GOOD CATCH 1 3.5197.4 2.821 2.1421 1.4464.6 ;
END
END
use strict ;
sub multiply {
my ( $str ) = @_;
$str =~ s/(GOOD CATCH.*?;)/_multiply()/ge;
return $str;
}
sub _multiply {
my ( $str ) = @_;
$str =~ s/(\d\d+)/_mul_number()/ge;
return $str;
}
sub _mul_number {
my ($num) = @_;
return $num * 2;
}
正则表达式 $str =~ s/(\d\d+)/_mul_number()/ge;
查找 (\d\d+)
,它将匹配两个或更多数字的序列,但不匹配小数点。对于十进制数,它会将它们视为两个单独的数字;例如,给定“12.34”,它将分别处理“12”和“34”,得到“7.44”和“21.08”,最终结果为“7.44.21.08”。这可能不是你想要的。
为了处理输入中的小数,您需要扩展正则表达式以匹配它们。一个简单的可能性是 ([\d.]+)
,即:$str =~ s/([\d.]+)/_mul_number()/ge;
一个更复杂的正则表达式也可以确保最多有一个小数点(拒绝“12.34.56”)或允许 +
and/or -
正负符号数字。