$val=$val+0; # Sum
$val=eval "$val"; # Eval
$val=sprintf("%f", $val); # Sprintf
# Call your original technique "Regex"
####
Sum("1.25e-5") gives '1.25e-05'
Regex("1.25e-5") '1.25e-05'
Eval("1.25e-5") '1.25e-05'
Sum("1.25e-3") 0.00125
Regex("1.25e-3") 0.00125
Eval("1.25e-3") 0.00125
####
Sprintf("1.25e-5") 0.000013
Sprintf("1.25e-3") 0.001250
Sprintf("1.25e-7") 0.000000
####
sprintf("%.10f", $val) 0.0012500000
####
Benchmark: timing 100000 iterations of Eval, Regex, Sprintf, SprintfSubst, Sum...
Eval: 20 wallclock secs (19.58 usr + 0.00 sys = 19.58 CPU)
Regex: 9 wallclock secs ( 9.97 usr + 0.00 sys = 9.97 CPU)
Sprintf: 7 wallclock secs ( 6.22 usr + 0.00 sys = 6.22 CPU)
SprintfSubst: 8 wallclock secs ( 8.74 usr + 0.00 sys = 8.74 CPU)
Sum: 4 wallclock secs ( 3.52 usr + 0.00 sys = 3.52 CPU)
####
#!/usr/bin/perl
use Benchmark;
sub Regex {
my $val=shift;
$val =~ s/([\.\d]+)e([-+]?\d+)/$1*10**$2/egi;
return $val;
}
sub Eval {
my $val=shift;
$val=eval " $val ";
return $val;
}
sub Sum {
my $val=shift;
$val=$val+0;
return $val;
}
sub Sprintf {
my $val=shift;
$val=sprintf("%f",$val);
return $val;
}
sub SprintfSubst {
my $val=shift;
$val=sprintf("%.10f", $val);
$val=~s/0*$//;
return $val;
}
timethese(100000, { Regex => sub { Regex("1.25e-3") },
Eval => sub { Eval("1.25e-3") },
Sum => sub { Sum("1.25e-3") },
Sprintf => sub { Sprintf("1.25e-3") },
SprintfSubst => sub { SprintfSubst("1.25e-3") },
});