I know that after 15 digits (yes integers) that the format changes to scientific notation therefore I have coded that into my script but after I think#!/usr/local/bin/perl -w #perl2exe_include Tk; #perl2exe_include Tk::Photo; #perl2exe_include strict; use Tk; use Tk::Photo; use strict; ########################################### ########################################### ## ## ## This script is a graphical interface ## ## that allows a user to easily convert ## ## IP bandwidth into ATM PCR. ## ## PCR = (Peak Cell rate) ## ## ## ########################################### ########################################### our($choice, $cb, $pcr, $bps, $status, $answer, $cell_size, $cell_size +2); my $window = MainWindow->new; $window->title("ip2atm"); my $frame_space = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame_space2 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame2 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame_space3 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame3 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame4 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame_space5 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame5 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame6 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame_space7 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame7 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame_space8 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame8 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame9 = $window->Frame->pack(-side=>'top', -fill=>'x'); my $frame10 = $window->Frame->pack(-side=>'top', -fill=>'x'); $frame_space->Label()->pack(-fill=>'x'); $frame->Label(-text=>"Choose Conversion Type")->pack(-side=>'top', -an +chor=>'n'); $frame->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame->Button(-text=>"Cells to Bits", -command=>\&cb)-> pack(-side=>'left', -anchor=>'w', -fill=>'none'); $frame->Label(-text=>" ")->pack(-side=>'right', -anchor=>'e'); $frame->Button(-text=>"Bits to Cells", -command=>\&bc)-> pack(-side=>'right', -anchor=>'e', -fill=>'none'); $frame_space2->Label()->pack(-fill=>'x'); $frame2->Label(-text=>"Conversion Type Being Used")->pack(-side=>'top' +, -anchor=>'n'); $frame2->Entry(-textvariable=>\$choice)-> pack(-side=>'bottom', -anchor=>'n', -fill=>'none'); $frame_space3->Label()->pack(-fill=>'x'); $frame3->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame3->Label(-text=>"Enter Peak Cell Rate")->pack(-side=>'left', -an +chor=>'w'); $frame3->Label(-text=>" ")->pack(-side=>'right', -anchor=>'e'); $frame3->Label(-text=>"Enter Bits Per Second")->pack(-side=>'right', - +anchor=>'e'); $frame4->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame4->Entry(-textvariable=>\$pcr)-> pack(-side=>'left', -anchor=>'w', -fill=>'none'); $frame4->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame4->Label(-text=>" ")->pack(-side=>'right', -anchor=>'e'); $frame4->Entry(-textvariable=>\$bps)-> pack(-side=>'right', -anchor=>'e', -fill=>'none'); $frame_space5->Label()->pack(-fill=>'x'); $frame5->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame5->Label(-text=>"Enter Cell Size")->pack(-side=>'left', -anchor= +>'w'); $frame5->Label(-text=>" ")->pack(-side=>'right', -anchor=>'e'); $frame5->Label(-text=>"Enter Cell Size")->pack(-side=>'right', -anchor +=>'e'); $frame6->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame6->Entry(-textvariable=>\$cell_size)-> pack(-side=>'left', -anchor=>'w', -fill=>'none'); $frame6->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame6->Label(-text=>" ")->pack(-side=>'right', -anchor=>'e'); $frame6->Entry(-textvariable=>\$cell_size2)-> pack(-side=>'right', -anchor=>'e', -fill=>'none'); $frame_space7->Label()->pack(-fill=>'x'); $frame7->Button(-text=>" Convert ", -command=>\&convert)-> pack(-side=>'top', -anchor=>'n'); $frame_space8->Label()->pack(-fill=>'x'); $frame8->Label(-text=>" Answer ")->pack(-side=>'top', -anchor=>'n'); $frame9->Label(-text=>" ")->pack(-side=>'left', -anchor=>'w'); $frame9->Entry(-textvariable=>\$answer)-> pack(-side=>'top', -anchor=>'n', -fill=>'none'); $frame10->Button(-text=>" Exit ", -command=>sub{exit;})-> pack(-side=>'bottom', -anchor=>'e'); $window->Label(-textvariable=>\$status, -relief=>'ridge')-> pack(-side=>'bottom', -fill=>'x'); if (-e "converter.gif") { $window->Photo('image', -file=>"converter.gif"); $window->Label(-image=>'image')->pack(-side=>'bottom'); } $status = "Written by: Me"; MainLoop; sub cb { $choice = "Cells to Bits"; $bps = "N/A"; $cell_size2 = "N/A"; $pcr = ""; $cell_size = ""; $answer = ""; } sub bc { $choice = "Bits to Cells"; $pcr = "N/A"; $cell_size = "N/A"; $bps = ""; $cell_size2 = ""; $answer = ""; } sub convert { my ($len1, $type); if ($choice eq "Cells to Bits") { if ($pcr && $cell_size) { $answer = $pcr * $cell_size * 8; $len1 = length($answer); print $len1,"\n"; print $answer,"\n"; if (($len1 < 4) || ($len1 > 15)) { $type = "b/s"; }elsif (($len1 >= 4) && ($len1 <= 6)) { $type = "Kb/s"; $answer = substr($answer, 0, 1)." ".$type if $len1 == 4; $answer = substr($answer, 0, 2)." ".$type if $len1 == 5; $answer = substr($answer, 0, 3)." ".$type if $len1 == 6; }elsif (($len1 >= 7) && ($len1 <= 9)) { $type = "Mb/s"; $answer = substr($answer, 0, 1)." ".$type if $len1 == 7; $answer = substr($answer, 0, 2)." ".$type if $len1 == 8; $answer = substr($answer, 0, 3)." ".$type if $len1 == 9; }else{ $type = "Gb/s"; foreach (my $count=1; $count<10; $count++) { chop($answer); } $answer .= " ".$type; } $status = "Conversion Successfull!"; }else{ $status = "Error: required field missing!"; } }elsif ($choice eq "Bits to Cells") { if ($bps && $cell_size2) { $answer = $bps / 8 / $cell_size2; $answer = sprintf("%.0f", $answer) . " cps"; $status = "Conversion Successfull!"; }else{ $status = "Error: required field missing!"; } }else{ $status = "Error: required field missing!"; } }
Here is a debugger output I have going to the command prompt to check the value of the 2 variables ($len1 and $answer) and you cans ee where the length jumps back down and screws me.
5 41976 6 423576 7 4239576 8 42399576 9 423999576 10 4239999576 11 42399999576 12 423999999576 13 4239999999576 14 42399999999576 15 423999999999576 21 4.23999999999958e+015 21 4.23999999999996e+016 9 4.24e+017
The first number (as you can see by the code) is the value of the length in digits of the answer and the second (longer number) is the actual answer.
In reply to Re: Re: Scientific Notation Throws Off Results.
by Elijah
in thread Scientific Notation Throws Off Results.
by Elijah
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |