我必须在文件中增加版本号。我可以模式匹配版本号。在特定字符串中使用以下代码:
if($string =~ /versionName="(\d{1,3}+(\.\d{1,3})?)"/)
现在有价值的可能性是:
1. x{1,3}.x{1,3}
(最多包含三位小数值或不包含小数的值)
现在我必须相应地增加值。
如果对这个问题有任何疑惑,请告诉我 我之前没有做过这种事情,现在很困惑。 任何帮助将不胜感激。!!
答案 0 :(得分:3)
基本上,你想忽略“。”在做加法时。
你可以通过乘以10 n 来实现这一点,其中 n 是加法前的小数位数,然后除以相同的因子,但是你' d需要担心浮点精度误差。
你也可以通过字面删除“。”来实现这一点。来自字符串。
if (my ($unit, $frac) = $num =~ /^([^.]*)\.(.+)/s) {
my $places = length($frac);
$num = "$unit$frac" + 1;
$num = sprintf('%0*d', $places+1, $num); # Handle 0.x
substr($num, -$places, 0, '.');
} else {
++$num;
}
答案 1 :(得分:1)
计算十进制数(1,2,3)= C.乘以10 exp C.加1然后除以10expC。 是的?
示例:
10.999
°乘以1000 = 10999
°add 1 = 11000
°除以1000 = 11.000
答案 2 :(得分:0)
如果版本包含多于一次的小数,那么我们可能会遇到一些问题(例如: - 10.9.9会导致11.0.0)
我试过写一个应该帮助的perl片段
my $version="10 .9.9" ;
$version =~ s/\s+//g ;
my @ver_seg = split("",$version);
my $flag_incr=1;
for (my $i= @ver_seg-1; $i>0 && $flag_incr!=0 ; $i-- )
{
if ( $ver_seg[$i] !~ /\./ )
{
my $temp=$ver_seg[$i];
$temp=$temp+$flag_incr ;
$flag_incr= $temp/10;
$ver_seg[$i]=$temp%10;
}
}
my $version_new=join("",@ver_seg);
print "hi $version_new \n";
以10.9.9为例。