Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best way to prevent/handle divide by 0 in javascript

What is the best way to prevent divide by 0 in javascript that is accepting user inputs. If there is no particular way to achieve this what would be the best way to handle such a situation so as to not prevent other scripts from executing?

Any insights are much appreciated.

like image 477
dibs Avatar asked Nov 09 '11 21:11

dibs


People also ask

What happens if you divide by 0 in JavaScript?

The output of the code in JavaScript is as follows: Dividing the number 0 by 0 returns NaN. Dividing the positive number by 0 returns Infinity. Dividing the negative number by 0 returns -Infinity.

Is division by 0 is considered as error in JavaScript?

Solution(By Examveda Team)Division by zero is not an error in JavaScript: it simply returns infinity or negative infinity. There is one exception, however: zero divided by zero does not have a welldefined value, and the result of this operation is the special not-a-number value, printed as NaN.


2 Answers

There is no way to do that with the normal / and /= operators.

The best way to do what you want is with guards:

function notZero(n) {   n = +n;  // Coerce to number.   if (!n) {  // Matches +0, -0, NaN     throw new Error('Invalid dividend ' + n);   }   return n; } 

and then do division like

numerator / notZero(denominator) 

Alternatively you can always guard the output

function dividend(numerator, denominator) {   var quotient = numerator / denominator;   if (quotient !== quotient) { throw new Error(numerator + " / " + denominator); }   return quotient; } 

but that loses the readability and expressiveness of /=.

like image 66
Mike Samuel Avatar answered Sep 24 '22 09:09

Mike Samuel


Off the top of my head you could:

  1. Check the user input to see if the denominator is zero (or evaluates to zero, depending on what your script actually does).
  2. Check if the result of the action isFinite() and if not then handle appropriately.
like image 33
maerics Avatar answered Sep 25 '22 09:09

maerics