- **Perl Misc**
(*http://www.velocityreviews.com/forums/f67-perl-misc.html*)

- - **Rounding up in perl**
(*http://www.velocityreviews.com/forums/t909231-rounding-up-in-perl.html*)

Rounding up in perlIs there more than one function for rounding a number up in perl? I tried the ceil() function but get an undefined subroutine message. |

Re: Rounding up in perlDavid Groff <david.groff@noaa.gov> wrote:
> > >Is there more than one function for rounding a >number up in perl? >I tried the ceil() function but get an undefined subroutine >message. See perldoc -q round "Does Perl have a round() function? What about ceil() and floor()?" jue |

Re: Rounding up in perlOn 2008-12-17 15:37, David Groff <david.groff@noaa.gov> wrote:
> Is there more than one function for rounding a > number up in perl? For rounding - yes. For rounding up - no. > I tried the ceil() function but get an undefined subroutine > message. You forgot "use POSIX"? hp |

Re: Rounding up in perlDavid Groff wrote:
> > > Is there more than one function for rounding a > number up in perl? > I tried the ceil() function but get an undefined subroutine > message. Simply add 0.5 to the number and round, or convert to an integer then add 1 or add 1 then convert to an integer. Marshall |

Re: Rounding up in perlMarshall Dudley <mdudley@king-cart.com> wrote:
>David Groff wrote: >> I tried the ceil() function but get an undefined subroutine >> message. >[...] convert to an integer then >add 1 or add 1 then convert to an integer. Bad idea if the number is a natural number already. jue |

Re: Rounding up in perlMarshall Dudley wrote:
> David Groff wrote: >> >> >> Is there more than one function for rounding a >> number up in perl? >> I tried the ceil() function but get an undefined subroutine >> message. > Simply add 0.5 to the number and round, or convert to an integer then > add 1 or add 1 then convert to an integer. Neither of these methods is bullet proof. Accuracy of the results will depend on the number and/or the method used to do the rounding. use strict; use warnings; while (my $i = <DATA>) { chomp $i; my $j = $i + 1; my $k = $i + 0.5; print "$i rounds to ", sprintf('%d', $j), ' or ', sprintf('%.0f', $k), "\n"; } __DATA__ 2 3 ---- 2 rounds to 3 or 2 3 rounds to 4 or 4 |

Re: Rounding up in perlOn Wed, 17 Dec 2008 10:37:22 -0500, David Groff <david.groff@noaa.gov> wrote:
> > >Is there more than one function for rounding a >number up in perl? >I tried the ceil() function but get an undefined subroutine >message. Here is a Perl ceil/floor equivalent. The first code section seems to correctly implement floor by taking into account that int() does not use the sign in its process of rounding. The second code section with floor, although intuitive is not correct. For a full proof, all the values between 2.0 - 2.9 should be checked. sln # =========================================== # Correct ceil/floor equavelent # This floor takes the sign into acount # when rounding. # - - - - - - - - use strict; use warnings; printf( "The floor of 2.8 is %f\n", _floor( 2.8 ) ); printf( "The floor of -2.8 is %f\n", _floor( -2.8 ) ); printf( "The ceil of 2.8 is %f\n", _ceil( 2.8 ) ); printf( "The ceil of -2.8 is %f\n", _ceil( -2.8 ) ); sub _ceil {return int(shift()+.5)} sub _floor {my $y = shift(); return int(($y < 0) ? $y-.5 : $y)} __END__ The floor of 2.8 is 2.000000 The floor of -2.8 is -3.000000 The ceil of 2.8 is 3.000000 The ceil of -2.8 is -2.000000 # =========================================== # Correct ceil equavelent, incorrect floor # Int() rounds down the Absolute value. # So do not use this floor. # - - - - - - - - use strict; use warnings; printf( "The floor of 2.8 is %f\n", _floor( 2.8 ) ); printf( "The floor of -2.8 is %f\n", _floor( -2.8 ) ); printf( "The ceil of 2.8 is %f\n", _ceil( 2.8 ) ); printf( "The ceil of -2.8 is %f\n", _ceil( -2.8 ) ); sub _ceil {return int(shift()+.5)} sub _floor {return int(shift())} __END__ The floor of 2.8 is 2.000000 The floor of -2.8 is -2.000000 The ceil of 2.8 is 3.000000 The ceil of -2.8 is -2.000000 ========================================== C - reference code // crt_floor.c // This example displays the largest integers // less than or equal to the floating-point values 2.8 // and -2.8. It then shows the smallest integers greater // than or equal to 2.8 and -2.8. #include <math.h> #include <stdio.h> int main( void ) { double y; y = floor( 2.8 ); printf( "The floor of 2.8 is %f\n", y ); y = floor( -2.8 ); printf( "The floor of -2.8 is %f\n", y ); y = ceil( 2.8 ); printf( "The ceil of 2.8 is %f\n", y ); y = ceil( -2.8 ); printf( "The ceil of -2.8 is %f\n", y ); } Output The floor of 2.8 is 2.000000 The floor of -2.8 is -3.000000 The ceil of 2.8 is 3.000000 The ceil of -2.8 is -2.000000 |

Re: Rounding up in perlsln@netherlands.com <sln@netherlands.com> wrote:
> taking into account that > int() does not use the sign in its process of rounding. That is because int() does not *have* a process of rounding. int() does not do rounding. -- Tad McClellan email: perl -le "print scalar reverse qq/moc.noitatibaher\100cmdat/" |

Re: Rounding up in perlOn Thu, 18 Dec 2008 18:52:30 -0600, Tad J McClellan <tadmc@seesig.invalid> wrote:
>sln@netherlands.com <sln@netherlands.com> wrote: > >> taking into account that >> int() does not use the sign in its process of rounding. > > >That is because int() does not *have* a process of rounding. > >int() does not do rounding. Not only does int() round, but there is no way it can return without rounding. sln perlfunc.html =============================== Numeric functions ...., int, ... int EXPR int Returns the integer portion of EXPR. If EXPR is omitted, uses $_. You should not use this function for rounding: one because it truncates towards 0, and two because machine representations of floating point numbers can sometimes produce counterintuitive results. |

Re: Rounding up in perl>>>>> "s" == sln <sln@netherlands.com> writes:
s> On Thu, 18 Dec 2008 18:52:30 -0600, Tad J McClellan <tadmc@seesig.invalid> wrote: >> That is because int() does not *have* a process of rounding. >> int() does not do rounding. s> Not only does int() round, but there is no way it can return s> without rounding. and you determined that from what text in the docs you quote? s> perlfunc.html s> =============================== s> Numeric functions s> ..., int, ... s> int EXPR s> int s> Returns the integer portion of EXPR. If EXPR is omitted, s> uses $_. You should not use this function for rounding: s> one because it truncates towards 0, and two because machine s> representations of floating point numbers can sometimes s> produce counterintuitive results. and where does it say int() does rounding? it even says you should NOT use it for rounding. truncation (which is what int() does) is not rounding in any sense of the term rounding. your saying otherwise will not make it so. uri -- Uri Guttman ------ uri@stemsystems.com -------- http://www.sysarch.com -- ----- Perl Code Review , Architecture, Development, Training, Support ------ --------- Free Perl Training --- http://perlhunter.com/college.html --------- --------- Gourmet Hot Cocoa Mix ---- http://bestfriendscocoa.com --------- |

All times are GMT. The time now is 10:47 AM. |

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.

SEO by vBSEO ©2010, Crawlability, Inc.