Math-Ryu
view release on metacpan or search on metacpan
my @parts = split /E/i, $s;
if($parts[1] > 0 && $parts[1] < MAX_DEC_DIG) {
# We want, eg, a value like 1.1E-3 to be returned as "0.0011".
my $zero_pad = $parts[1] - (length($parts[0]) - 2);
if($zero_pad >= 0 && ($zero_pad + length($parts[0])) < MAX_DEC_DIG + 1 ) {
substr($parts[0], 1, 1, '');
return $sign . $parts[0] . ('0' x $zero_pad) . '.0';
}
elsif($zero_pad < 0) {
# We want, eg, a value like 1.23625E2 to be returned as "123.625".
# relocate the decimal point
substr($parts[0], 1, 1, '');
substr($parts[0], $zero_pad, 0, '.');
return $sign . $parts[0];
}
}
# Return as is, except that we replace the 'E' with 'e', ensuring also
# that the exponent is preceded by a '+' or '-' sign, and that
# negative exponents consist of at least 2 digits.
$s =~ s/e/e\+/i if $parts[1] > 0;
man_str[i + is_neg + 1] = '\0';
outsv = newSVpv(man_str, 0);
Safefree(man_str);
Safefree(exp_str);
if(is_neg) s--;
return outsv;
}
else if(zero_pad < 0) {
/* We want, eg, 1.23625E2 to be returned as "123.625". *
* This involves relocation of the decimal point. */
len = strlen(s);
zero_pad--;
if(is_neg) man_str[0] = '-';
man_str[0 + is_neg] = s[0];
man_str[1 + is_neg] = s[2]; /* s[1] is the decimal point */
dec = 1; /* set to 0 when the decimal point is encountered */
for(i = 2; i < len; i++) {
if(i == zero_pad + len) {
man_str[i + is_neg] = '.';
dec--;
( run in 0.641 second using v1.01-cache-2.11-cpan-5511b514fd6 )