简体   繁体   中英

How do I get the absolute value of an integer without using Math.abs?

How do I get the absolute value of a number without using math.abs?

This is what I have so far:

function absVal(integer) {
    var abs = integer * integer;
    return abs^2;
}

You can use the conditional operator and the unary negation operator :

function absVal(integer) {
  return integer < 0 ? -integer : integer;
}

You can also use >> (Sign-propagating right shift)

function absVal(integer) {
    return (integer ^ (integer >> 31)) - (integer >> 31);;
}

Note: this will work only with integer

Since the absolute value of a number is "how far the number is from zero", a negative number can just be "flipped" positive (if you excuse my lack of mathematical terminology =P):

var abs = (integer < 0) ? (integer * -1) : integer;

Alternatively, though I haven't benchmarked it, it may be faster to subtract-from-zero instead of multiplying (ie 0 - integer ).

Late response, but I think this is what you were trying to accomplish:

function absVal(integer) {
   return (integer**2)**.5;
}

It squares the integer then takes the square root. It will eliminate the negative.

There's no reason why we can't borrow Java's implementation .

  function myabs(a) { return (a <= 0.0) ? 0.0 - a : a; } console.log(myabs(-9)); 

How this works:

  • if the given number is less than or zero
    • subtract the number from 0, which the result will always be > 0
  • else return the number (because it's > 0 )

Check if the number is less than zero! If it is then mulitply it with -1;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM