Perl's
printf and
sprintf routines (and functions with similar names in C and PHP, and the Python % operator) all provide us with a reasonably flexible way of formatting floating point numbers, but they can't meet every eventuallity. At times, you'll need to use sprintf to do most of the work then adjust it with some other facility such as regular expressions.
Example ... if you want to add a "+" sign onto the front of a positive number ... a couple of quick regular expressions will do the trick. And if you want to avoid "-0.00" being reported for a tiny negative number, you can do another fix. Here's the code:
sub price_format {
my $result = sprintf "%6.2f",$_[0];
$result =~ s/\s(\d)|^(\d)/+\1\2/;
$result =~ s/\s[-+]0\.(0+)$/ 0.\1/;
return $result;
Written, you'll note, as a named block of code - a "sub" - so that you can easily store it in a module, reuse it, not have to work out those expressions again.
Complete code (commented and with test program)
here
Sample output - showing special formatting in the left had column, and regular sprintf format to the right:
-1.65 -1.65
-1.10 -1.10
-0.55 -0.55
0.00 -0.00
+0.55 0.55
+1.10 1.10
+1.65 1.65 (written 2006-09-15)
Associated topics are indexed under
P207 - Perl - File Handling [3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
[3326] Finding your big files in Perl - design considerations beyond the course environment - (2011-06-14)
[2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
[2821] Chancellor George Osborne inspires Perl Program - (2010-06-22)
[2818] File open and read in Perl - modernisation - (2010-06-19)
[2405] But I am reading from a file - no need to prompt (Perl) - (2009-09-14)
[2233] Transforming data in Perl using lists of lists and hashes of hashes - (2009-06-12)
[1861] Reactive (dynamic) formatting in Perl - (2008-10-31)
[1860] Seven new intermediate Perl examples - (2008-10-30)
[1841] Formatting with a leading + / Lua and Perl - (2008-10-15)
[1709] There is more that one way - Perl - (2008-07-14)
[1467] stdout v stderr (Tcl, Perl, Shell) - (2007-12-10)
[1442] Reading a file multiple times - file pointers - (2007-11-23)
[1416] Good, steady, simple example - Perl file handling - (2007-10-30)
[1312] Some one line Perl tips and techniques - (2007-08-21)
[702] Iterators - expressions tha change each time you call them - (2006-04-27)
[618] Perl - its up to YOU to check your file opened - (2006-02-23)
[616] printf - a flawed but useful function - (2006-02-22)
[255] STDIN, STDOUT, STDERR and DATA - Perl file handles - (2005-03-23)
[114] Relative or absolute milkman - (2004-11-10)
[12] How many people in a room? - (2004-08-12)
Some other Articles
Java oversold?Autumn comes to Wiltshire.UNABLE TO ATTENDSmoking, or noBeing sure to be positive in PerlA lazy programmer is a good programmerCatching the slopeAdd to shopping cart - NO VACANCIES signDouble and Triple equals operator in PHP4 weeks to go