• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 378
  • Last Modified:

Rounding up numbers in PERL

I have this code:

my $avg = ($n1 + $n2 + $n3 + $n4 + $n5 + $n6 + $n7)/ 7;

which gives me an average of all the values in those variables.
The result is this:
24,36,45,67,887,33,320, 201.285714285714, with 201.285714285714 being the variable

how do I round this number to no decimal places, so it would just be 201     ?
0
Europa MacDonald
Asked:
Europa MacDonald
  • 7
  • 5
  • 2
  • +1
1 Solution
 
ozoCommented:
use POSIX:
#round up
print ceil $avg;
#round down
print floor $avg;
#round to nearest
print floor $avg+0.5;
#or
printf "%.f",$avg;
0
 
Europa MacDonaldChief slayer of dragonsAuthor Commented:
using print floor $avg; gave me

456,657,432,345,677,899,322, floor 540.714285714286
0
 
Europa MacDonaldChief slayer of dragonsAuthor Commented:
written :

  print OUT "$n1,$n2,$n3,$n4,$n5,$n6,$n7, floor $avg\n";
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Suhas .QA ManagerCommented:
print "%d",$avg gives the rounded value of an average result.
0
 
ozoCommented:
use POSIX;
print OUT "$n1,$n2,$n3,$n4,$n5,$n6,$n7,",floor $avg,"\n";
0
 
Europa MacDonaldChief slayer of dragonsAuthor Commented:
still getting 24,36,45,67,887,33,320, floor 201.285714285714
0
 
ozoCommented:
> print "%d",$avg gives the rounded value of an average result.
no, it gives
%d540.714285714286
printf  "%d",$avg; #gives the truncated value of $avg
printf  "%.f",$avg; #gives the rounded value of $avg
0
 
ozoCommented:
> still getting 24,36,45,67,887,33,320, floor 201.285714285714
do you still have the "floor" in  quotes?
0
 
ozoCommented:
print "$n1,$n2,$n3,$n4,$n5,$n6,$n7,",(floor $avg),"\n";
0
 
ozoCommented:
or
 print "$n1,$n2,$n3,$n4,$n5,$n6,$n7,", floor($avg) , "\n";
0
 
Europa MacDonaldChief slayer of dragonsAuthor Commented:
thankyou :-)
0
 
Suhas .QA ManagerCommented:
#thanks for the correction for print to printf ozo.
# since Michael request is "how do I round this number to no decimal places, so it would just be 201"


Michael,
Is your requirement like 201.**** to 201, if so its better to use %d
or less than 201.5 to 201 and greather than 201.5 to 202 , then use %f with condition


Cheers...
Suhas
0
 
Europa MacDonaldChief slayer of dragonsAuthor Commented:
thankyou Suhas
0
 
ozoCommented:
the question title was about rounding up
but 201.285714285714 to 201 is rounding down
or it could be rounding to the nearest integer, or it could be truncating.
The difference would be seen with 201.9 and -201.9
0
 
TintinCommented:
A useful feature to use is the perl FAQ.  From the command line type

perldoc -q floor

0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 7
  • 5
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now