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 - 正负符号数字。