* Bernie Cosell <[EMAIL PROTECTED]> [2004-04-19 17:37]: > So: what I want is something to format money correctly, whther > it is fractional or not. there's the fairly awful: > > sprintf ($amt =~ /\.\d\d\d/? "%7.3f": "%7.2f"), $amt
Right off the bat I thought of %g, but that doesn't really help: $ perl -e'printf "%7.4g\n", $_ for 1.2, 1.23, 1.234, 1.2345' 1.2 1.23 1.234 1.234 When testing $amt itself, I'd insist on using mathematical functions only for the sake of cleanliness -- you never know when stringification would surprise you. Unfortunately, getting the fractional part of a number in Perl is verbose using mathematical functions. So instead I'd say to do string mangling on the end result, which is only a string representation of $amt anyway: my $amt_str = sprintf "%7.3f", $amt; for($amt_str) { chop if /\.\d\d0\z/ } Test: perl -le'for (@ARGV) { $_ = sprintf "%7.3f", $_; \ chop if /\.\d\d0\z/; print; }' 1.2, 1.23, 1.234, 1.2345 1.20 1.23 1.234 1.234 It's not shorter or more obvious I'm afraid, just a little more correct. -- Regards, Aristotle "If you can't laugh at yourself, you don't take life seriously enough."