Zielfelder, Robert <[EMAIL PROTECTED]> wrote:
:
: #!/opt/perl5/bin/perl
:
: $var = "1.5";
: $var2 = sprintf("%.0f\n", $var);
:
: print $var2;
:
: $var3 = 1.5000001;
: $var4 = sprintf("%.0f\n", $var3);
:
: print $var4;
:
:
: The first Print statement yields 1. The second yields 2.
: I am using PERL Version 5.006 (result from command below)
: running under HP-UX 10.20.
That's not what I'm getting in 5.6.1 and 5.8.3 on winXP,
you'll probably have to roll your own rounding function.
sprintf '%.*f', $precision, $value + .5 * 10 ** -$precision;
where $precision is the number of places after the decimal
you need for precision. In your case:
sprintf '%.*f', 0, $value + .5 * 10 ** -0;
or just:
sprintf '%.0f', $value + .5;
You would be safer with one of the Math:: modules.
Math::FixedPrecision or Math::Financial. I doubt my solution is
as flexible or as reliable.
Here is an untested sub if your not writing a precision
critical application, but it won't port easily.
print round( 1.4999 );
sub round {
# should work on all positive numbers
my $value = shift;
# default to 0 if precision omitted
my $precision = $_[0] || 0;
return sprintf '%.*f', $precision, $value + .5 * 10 ** -$precision;
}
HTH,
Charles K. Clarkson
--
Head Bottle Washer,
Clarkson Energy Homes, Inc.
Mobile Home Specialists
254 968-8328
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>