Solved

Perl divide by zero problem with varibles extracted from text

Posted on 2008-10-20
6
808 Views
Last Modified: 2013-12-12
I have the following code, with give a dividing by zero problem. Obviously, the $fields[1] is not supposed to be zero. It print out a decimal number when direct print out. And it can be added to another varible with + and arithmetic is fine. But when it is in the denominator it it cuase such a message:

Illegal division by zero at E:\CruzerLock2\Stocks\quote2.pl line 151, <GEN0> lin
e 13.

The code segment look like this:


my $change = sprintf "%.2f",  ( $fields[4]) / ($fields[1])*100;



Is there something hidden in the fields[1] that couse this? Thanks
0
Comment
Question by:zzhang2006
  • 3
  • 2
6 Comments
 
LVL 48

Expert Comment

by:Tintin
ID: 22764142
$fields[1] must be 0 to cause the error.

Add a

print "$. $fields[1]\n";

before line 151 and post the output.
0
 
LVL 1

Author Comment

by:zzhang2006
ID: 22764311
You may be right, I change it to

 print "See this->  $. $fields[1] \n";

             my $change = sprintf "%.2f",
               ( $fields[4]) /$fields[1]*100;
Then it printed:

See this->  13
Illegal division by zero at E:\CruzerLock2\Stocks\quote2.pl line 152, <GEN0> lin
e 13.

Does a blank means zero? Where is the "13" come from? How can I put a condition to check $fields[1] not zero or simply being a number? Thanks
0
 
LVL 84

Accepted Solution

by:
ozo earned 500 total points
ID: 22764361
Blank is treated as 0 when used in arithmetic
$. is the input line number.
0
The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

 
LVL 84

Expert Comment

by:ozo
ID: 22764364
perldoc-q "How do I determine whether a scalar is a number/whole/integer/float"
0
 
LVL 1

Author Comment

by:zzhang2006
ID: 22764429
Great! I solved my problem. Thanks
0
 
LVL 1

Author Comment

by:zzhang2006
ID: 22764431
Great!
0

Featured Post

Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Skype is a P2P (Peer to Peer) instant messaging and VOIP (Voice over IP) service – as well as a whole lot more.
Healthcare organizations in the United States must adhere to the guidance of both the HIPAA (Health Insurance Portability and Accountability Act) and HITECH (Health Information Technology for Economic and Clinical Health Act) for securing and protec…
The viewer will learn how to create multiple layers to apply various filters and how to delete areas from each layer’s filter.
The viewer will learn how to successfully download and install the SARDU utility on Windows 8, without downloading adware.

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question