web-dev-qa-db-fra.com

rendre une valeur variable positive

J'ai une variable qui sera parfois négative et parfois positive.

Avant de l'utiliser, j'ai besoin de le rendre positif. Comment puis-je accomplir cela?

40
ian

Utilisez la méthode Math.abs .

Vous trouverez ci-dessous un commentaire sur l'utilisation de la négation (merci à Kelly de m'avoir fait penser à cela). Il est légèrement plus rapide que le Math.abs avec un grand nombre de conversions si vous faites une référence locale à la fonction Math.abs (sans la référence locale Math.abs, c'est beaucoup plus lent). 

Regardez le réponse à cette question pour plus de détails. Sur de petits nombres, la différence est négligeable et je pense que Math.abs est un moyen beaucoup plus simple de «documenter» le code. 

53
kemiller2002

Entre ces deux choix (merci à @Kooilnc pour l'exemple):

Number.prototype.abs = function(){
    return Math.abs(this);
};

et

var negative = -23, 
    positive = -negative>0 ? -negative : negative;

aller avec la seconde (négation). Il ne nécessite aucun appel de fonction et le processeur peut le faire en très peu d'instructions. Rapide, facile et efficace.

18
Kelly S. French
if (myvar < 0) {
  myvar = -myvar;
}

ou

myvar = Math.abs(myvar);
13
kgiannakakis

ou, si vous voulez éviter l'appel de fonction (et la création de branches), vous pouvez utiliser ce code:

x = (x ^ (x >> 31)) - (x >> 31);

c'est un peu "hackish" et ça a l'air sympa d'une manière étrange :) mais je resterais quand même avec Math.abs (je voulais juste montrer une autre façon de faire cela)

btw, cela ne fonctionne que si le moteur javascript sous-jacent stocke les entiers au format 32 bits, ce qui est le cas dans Firefox 3.5 sur ma machine (qui est 32 bits, de sorte qu'il risque de ne pas fonctionner sur une machine 64 bits, n'a pas été testé ...) 

2
krcko

Ce n'est pas une implémentation de jQuery mais utilise la bibliothèque mathématique de Javascript

x = Math.abs (x);

1
NickGPS

Si vous ne souhaitez pas utiliser Math.Abs, vous pouvez vous contenter de cette simple déclaration if: P

if (x < 0) {
    x = -x;
}

Bien sûr, vous pouvez en faire une fonction comme celle-ci

function makePositive(number) {
    if (number < 0) {
        number = -number;
    }
}

makepositive (-3) => 3 makepositive (5) => 5

J'espère que cela t'aides! Math.abs fonctionnera probablement pour vous, mais si ce n'est pas si peu 

0
Ash Pettit