SilverFox <[EMAIL PROTECTED]> wrote:
:
: I haven't put anything together as yet. Putting
: some if/elsif statement together would be the
: easiest way I can think off. Something like:
We can see a few problems right off. All scripts
should start with 'strict' and 'warnings'. We need a
consistent naming convention for variables. If some
start with capitalized letters, there should be a
non-arbitrary reason for doing so.
: $kilo= 1024;
: $Mega= 1048576;
: $gig= 1073741824;
use strict;
use warnings;
my $kilobyte = 1024;
my $megabyte = 1024 ** 2;
my $gigabyte = 1024 ** 3;
: print "Please enter your number:\n";
: chomp($num=<STDIN>);
chomp( my $value = <STDIN> );
: if ($num >= $gig)
: {
: "need code to do the convertion/rounding
: of given number" print "you entered:
: $num\n"; print "which is:
: } elsif {
: continue with the same format........
:
: }
:
: The problem i'm having it converting/rounding the
: inputted number into a valid byte (KB/MB/GB) count.
I suppose that takes some basic math. To round
to a whole number, we examine the fraction to
determine whether we should adjust the whole number
up or down. It is important to separate the number
from the fraction.
Luckily, Math::Round has the nearest() function.
To find the nearest number of units, we use this.
nearest( $unit, $number ) / $unit
Here's one solution. It's very generic. One
could easily adopt it for miles, yards, and feet
given a value in feet. I leave error checking to
you.
use strict;
use warnings;
use Math::Round 'nearest';
print "Please enter your number:\n";
chomp( my $value = <STDIN> );
my %units = (
1024 => 'KB',
1024 ** 2 => 'MB',
1024 ** 3 => 'GB',
);
foreach my $unit ( sort {$b <=> $a} keys %units ) {
if ( $value >= $unit ) {
printf "%s => %s %s\n",
$value,
nearest( $unit, $value ) / $unit,
$units{ $unit };
last;
}
}
__END__
We still need to handle values smaller than
1024, but this solution might make that easier
to do. It won't handle non-positive values, though.
my %units = (
1024 ** 0 => 'Bytes',
1024 ** 1 => 'KB',
1024 ** 2 => 'MB',
1024 ** 3 => 'GB',
);
HTH,
Charles K. Clarkson
--
Mobile Homes Specialist
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>