Output of perldoc -q round
Does Perl have a round() function? What about ceil() and floor()?
Trig functions?Remember that
int()
merely truncates toward0
. For rounding to a certain number of digits,sprintf()
orprintf()
is usually the easiest
route.printf("%.3f", 3.1415926535); # prints 3.142
The
POSIX
module (part of the standard Perl distribution) implements
ceil()
,floor()
, and a number of other mathematical and trigonometric
functions.use POSIX; $ceil = ceil(3.5); # 4 $floor = floor(3.5); # 3
In 5.000 to 5.003 perls, trigonometry was done in the
Math::Complex
module. With 5.004, theMath::Trig
module (part of the standard Perl
distribution) implements the trigonometric functions. Internally it
uses theMath::Complex
module and some functions can break out from the
real axis into the complex plane, for example the inverse sine of 2.Rounding in financial applications can have serious implications, and
the rounding method used should be specified precisely. In these
cases, it probably pays not to trust whichever system rounding is being
used by Perl, but to instead implement the rounding function you need
yourself.To see why, notice how you’ll still have an issue on half-way-point
alternation:for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i} 0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7 0.8 0.8 0.9 0.9 1.0 1.0
Don’t blame Perl. It’s the same as in C. IEEE says we have to do
this. Perl numbers whose absolute values are integers under2**31
(on
32 bit machines) will work pretty much like mathematical integers.
Other numbers are not guaranteed.