Recovering from Divide By 0 and Coming Back From Infinity with IsNaN and IsInfinite

While doing a series of regression tests, I noticed a few tests displayed errors due to a returned result of NaN. When I checked the test itself, it was for a margin calculation, and in some cases, one of the values was zero. This caused a divide by zero error, which returns NaN as a result. If this happens on the site, a 0.0% is displayed, but my test didn’t handle it correctly.

There would be two ways to approach this. One is the detect zeros before doing a divide and set the result to 0. This forces the result to agree with the site.

Another method is to use the isNaN function of Groovy. The calculation code stays the same, but the result is checked to see if it’s a number. For my situation, if the results is NaN, I set the answer to 0.0 to match the site result.

My formula is the following:

float calculatedMargin=(((Float.valueOf(GP) / Float.valueOf(sales)) * 100).round(1))

While it wouldn’t be hard to check if the value of GP or Sales is 0, I prefer to check the result at the end of the calculation using the following:

//If the result is NaN, or Infinity, set the calculatedMargin value to 0.0

if (calculatedMargin.isNaN()==true){
   calculatedMargin=0.0
}
if (calculatedMargin.isInfinite()==true){
   calculatedMargin=0.0
}

You’ll notice there is an isInfinite check. After correcting the NaN issue, I noticed the calculation could also return “Infinity” as a result. This is basically the other side of the coin when doing calculations with zero. If detected, this check sets the calculatedMargin to zero.

Both of these division errors are now handled by built in functions. Again, I could try and prevent the error in the first place by checking for zero values before doing any calculations. But, I prefer the second approach and just check the result. I could turn this validation into a Keyword, pass the calculated result, and use the validation in multiple places. That might be more efficient way of detecting and controlling the error.

I saw many solutions to this problem, but Groovy has these built in functions that handle the situation nicely and my false positive errors have been handled.

Other articles of interest:

Leave a Reply

Your email address will not be published. Required fields are marked *

Recent Comments
  • How To Disable the Quicken Registration Prompt (16)
    • Dave: Works for Quicken 2007 too. Thanks, Gina!
    • Charlie Fellenbaum: Yay, thanks, and that worked for Quicken 2006 as well.
    • Ken: This didn’t work for me. I have 2006. I installed on a new laptop. I must have registered before, don’t remember. I tried to register this time, but got an error message. I’d rather not registered, though. I use...
    • Neil Murphy: I discovered that early on. I’m using 2001.
    • Jeremy: Thank you so so so much. I am still using Quicken 2010 because Intuit didn’t want to properly support users abroad anymore (never mind that they only link to US banks for transaction downloads; they didn’t want my...
  • Quasi Performance/Load Testing with Katalon Studio (1)
    • Anthony: I have done this with 100 plus machines at the same time and it worked well and provided some useful feedback.
  • A Try Catch example in Katalon Studio (3)
    • Venkatesh: Hi Don Pedro Can you share me sample project ….which consist of basic to advanced stuff…If your github or gitlab url aso present please share… As I am beginer to this I need to learn lot
    • Don Pedro: Hi Lucas. Thank you for the kind comments. I would be happy to help. Let me know how I could be of assistance.
    • Lucas: Thanks for sharing a lot of Katalon tips and tricks. The Katalon team highly appreciate your support and feedback. To make Katalon Studio better and be the best free automation solution for testing community, we wish to coordinate...
  • Securely storing passwords and login details with Set Encrypted Text in Katalon Studio (1)
    • Agus: Hi Don, Is there a way to set the encrypted text to be used in the ‘WebUI.authenticate̵ 7; method? Basically I am trying to encrypt the password that is passed to the ‘WebUI.authenticate̵ 7; method. Thank you.
  • Katalon Studio – Manual View – The start of a test script (2)
    • ben: Hello Don Great Website. Keep up the work. I learnt a lot. cheers Ben.
    • Lucas: Hi Don Pedro, Thanks for sharing a lot of great articles related to Katalon Studio and Selenium. I am Lucas from Katalon team. From your point of view, we’ve learnt alot to improve our product and add more valuable features...
  • Another success with Katalon Studio (1)
    • Mahesh Joshi: Hi Don, I just started following your blog in regards to katalon. I want to introduce katalon studio at my work we do manual testing at work at the moment. What approach I should use for proof of concept with katalon for...
  • What went wrong with Crime City? (34)
    • G D: One thing I have noticed is the awkwardness of items and the attack points and how you can earn them. I was pretty pathetic with attack points and then I played that limited time boss and got weapons that had attack points in the...
  • Disable the Quicken 2012 Registration Prompt (1)
    • Scott: Thanks this worked great and is better then having to upgrade to a subscription!