< All Perl topicsPerl (1)

Test Parsing

General text parsing and useful subroutines. This is a powerful aspect of perl.

Perl:

Format a number nicely

Last updated at 03:11 PM on Monday 17th January, 2011 by Administrator


Example:

print "-123456789.2 = " . num2str(-123456789.87654321) . "\n";
print "-123456789.2 = " . num2str(-123456789.87654321,' ') . "\n";

-123456789.2 = -123,456,789.2
-123456789.2 = -123 456 789.876543

sub num2str
{
  my $num = shift;
  my $sep = shift; # optional
  
  my @places = split(/\./, abs($num));
  my $intDigits = $places[0];
  
  # add commas or spaces to $intDigits

  my $initialPlaces = length($intDigits) % 3;
  
  if($initialPlaces == 0 && length($intDigits) >= 3)
  {
    $initialPlaces = 3;
  }
  
  my $strNum = substr($intDigits,0,$initialPlaces);
  
  for(my $i = $initialPlaces; $i <= length($intDigits)-3; $i += 3)
  {
    $strNum .= (defined($sep) ? $sep : ",") . substr($intDigits,$i,3);
  }
  
  if($num < 0)
  {
    $strNum = "-" . $strNum;
  }
  
  if(@places > 1)
  {
    $strNum .= "." . $places[1];
  }
  
  return $strNum;
}

Comments (0)