Convertir un nombre négatif en positif en JavaScript


308

Existe-t-il une fonction mathématique en JavaScript qui convertit les nombres en valeur positive?

Réponses:


704

Vous pouvez utiliser ceci ...

Math.abs(x)

Math​.abs()| MDN


1
Vous voudrez peut-être même envisager ~ x + 1. C'est assez rapide, mais pas clair sur ce qu'il fait. Je l'ai fait pour montrer la différence: jsperf.com/absolute-int
omgaz

22
@omgaz Ce ne sont pas les mêmes ... var x = -100; ~x+1 === 100mais var x = 100; ~x+1 === -100. Math.absen fait toujours un positif tout en prenant ceux qui complètent simplement inverse le signe.
jduncanator

Vous voudrez peut-être même envisager -x. C'est assez rapide!
amara

93

Et alors x *= -1? J'aime sa simplicité.


17
Bien que cela soit simple, cela suppose que le nombre sera toujours négatif. Si le cas d'utilisation est tel, alors c'est génial. Sinon, je conseillerais la prudence.
myusuf

4
Je suis en désaccord avec @myusuf. Tout nombre qui xsera retourné. Si x = 23et est poussé dans cette équation, xsera alors égal -23. Selon les mots de M. Escalante, "Un positif multiplié par un négatif est égal à un négatif. Un négatif multiplié par un négatif égale un positif." ... "Comment puis-je atteindre ces kiiiiiiids?!"
ExcellentSP

2
Exactement @Shane hier. Si x=23, alors il deviendra -23. Comme la question va, «Convertir un nombre négatif en un nombre positif dans JS», mais ce qui précède retournera n'importe quel nombre, qu'il soit positif ou négatif.
myusuf

2
Compris. Mon interprétation de votre commentaire était dans le contexte de renverser le nombre et de ne pas xtoujours être positive. Mes excuses @myusuf.
ExcellentSP

1
rappelons simplement que cette solution ne s'applique pas aux nombres flottants, elle n'obtient que la partie décimale
Oscar Luza

46

Math.abs(x)ou si vous êtes certain de la valeur est négative avant la conversion juste préfixer un signe moins régulier: x = -x.


29

Le signe moins (-) peut convertir des nombres positifs en nombres négatifs et des nombres négatifs en nombres positifs. x=-yest du sucre visuel pour x=(y*-1).

var y = -100;
var x =- y;


12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

Je trouve cette solution facile à comprendre.


8

Si vous souhaitez écrire du code intéressant que personne d'autre ne pourra jamais mettre à jour, essayez ceci:

~ --x


1
Cela ne fonctionnera pas avec les virgules flottantes cependant ... et la valeur de x change aussi.
Alexis Wilke

Je suppose que si vous ne pouvez pas changer x: ~ --x; ++ x
Kyle

1
Kyle, l' ~opérateur convertit le nombre en un entier 32 bits. Si vous avez un flotteur en entrée, il est arrosé.
Alexis Wilke

7

Je sais que c'est un peu tard, mais pour les personnes aux prises avec cela, vous pouvez utiliser les fonctions suivantes:

  • Rendez n'importe quel nombre positif

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • Transformez n'importe quel nombre en négatif

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • Inverser n'importe quel nombre

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54

6

Négatif à positif

var X = -10 ;
var number = Math.abs(X);     //result 10

Positif à négatif

var X = 10 ;
var number = (X)*(-1);       //result -10

Je vois ce que tu veux montrer mais la façon dont tu le dis est déroutant. Vous devriez peut-être dire: au positif: utilisez abs, au négatif: abs (x) * -1. De cette façon, vous n'impliquez pas ce qu'est l'ancien signe X.
Dionys

5

La multiplication par (-1) est le moyen le plus rapide de convertir un nombre négatif en positif. Mais vous devez faire attention à ne pas convertir mon erreur en nombre positif en négatif! Un contrôle supplémentaire est donc nécessaire ...

Ensuite, Math.abs, Math.floor et parseInt sont les plus lents.

entrez la description de l'image ici

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
Certains d'entre nous oublient à quel point les mathématiques de base peuvent être utiles dans de tels cas. Merci de me rappeler cette simplicité.
Alexander Dixon

2

J'ai fait quelque chose comme ça moi-même.

num<0?num*=-1:'';

Il vérifie si le nombre est négatif et si c'est le cas, multipliez par -1. Cela renvoie une valeur, à vous de voir si vous la capturez. Si vous souhaitez l'attribuer à quelque chose, vous devriez probablement faire quelque chose comme:

var out = num<0?num*=-1:num; //I think someone already mentioned this variant.

Mais cela dépend vraiment de votre objectif. Pour moi, c'était simple, le rendre positif s'il est négatif, sinon ne rien faire. D'où le '' dans le code. Dans ce cas j'ai utilisé un opérateur tertiaire car je le voulais, ça pourrait très bien être:

if(num<0)num*=-1;

J'ai vu la solution au niveau du bit ici et je voulais également commenter celle-ci.

~--num; //Drawback for this is that num original value will be reduced by 1

Cette soultion est très fantaisiste à mon avis, on pourrait la réécrire comme ceci:

~(num = num-1);

En termes simples, nous prenons le nombre négatif, en retirons un, puis l'inversons au niveau du bit. Si nous l'avions inversé au niveau du bit, nous obtiendrions une valeur 1 trop petite. Vous pouvez également le faire:

~num+1; //Wont change the actual num value, merely returns the new value

Cela fera de même mais inversera d'abord, puis ajoutera 1 au nombre positif. Bien que vous puissiez faire ceci:

~num++; //Wont display the right value.

Cela ne fonctionnera pas en raison de la priorité , les opérateurs de suffixe tels que ceux num++qui seraient évalués avant ~ et la raison pour laquelle le préfixe ++numne fonctionnerait pas même s'il est sur la même priorité que NOT au niveau du bit (~), est parce qu'il est évalué de droite à gauche. J'ai essayé de les échanger, mais il semble que le préfixe soit un peu capricieux par rapport au NON bit à bit. Le +1 fonctionnera car «+» a une priorité plus élevée et sera évalué plus tard.

J'ai trouvé cette solution plutôt amusante et j'ai décidé de l'étendre car elle était juste jetée là-bas et les gens qui la regardaient l'ignoraient probablement. Bien que oui, cela ne fonctionnera pas avec des flotteurs.

J'espère que ce message ne s'est pas éloigné de la question d'origine. : /


2

Mon approche minimale

Pour convertir un nombre négatif en positif et vice-versa

var num = -24;
num -= num*2;
console.log(num)
// result = 24


0

Vous pouvez utiliser l' opérateur ~ qui convertit logiquement le nombre en négatif et ajoute 1 au négatif:

var x = 3;
x = (~x + 1);
console.log(x)
// result = -3


0

Je connais une autre façon de le faire. Cette technique fonctionne de négatif à positif et vice versa

var x = -24;
var result = x * -1;

Vice versa:

var x = 58;
var result = x * -1;

CODE EN DIRECT:

// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);

// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);

// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);

// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);


Cela ne répond pas à la question. Dave demande une fonction qui change la valeur négative en positive et positive en positive .
RaphaMex

Sa question dit "Existe-t-il une fonction mathématique en JavaScript qui convertit les nombres en valeur positive?" Il ne mentionne pas de positif à positif. Il mentionne seulement le négatif au positif. Pourquoi voudriez-vous convertir le positif en positif? La valeur serait la même.
Tarryk Ttmm

Vous pouvez demander des éclaircissements dans un commentaire sous la question. Quoi qu'il en soit, il existe une réponse acceptée qui est la bonne. Vous pouvez le relire et voir qu'il y a une fonction intégrée qui ... convertit le positif en positif.
RaphaMex


0

Si vous voulez que le nombre soit toujours positif, peu importe ce que vous pouvez faire.

function toPositive(n){
    if(n < 0){
        n = n * -1;
    }
    return n;
}
var a = toPositive(2);  // 2
var b = toPositive(-2); // 2

Vous pouvez également essayer ceci, mais je ne le recommande pas:

function makePositive(n){
    return Number((n*-n).toString().replace('-','')); 
}
var a = makePositive(2);  // 2
var b = makePositive(-2); // 2

Le problème avec cela est que vous pouvez changer le nombre en négatif, puis convertir en chaîne et supprimer le - de la chaîne, puis reconvertir en int. Ce qui, je suppose, nécessiterait plus de traitement que l'utilisation de l'autre fonction.

J'ai testé cela en php et la première fonction est plus rapide, mais parfois JS fait des choses folles, donc je ne peux pas le dire avec certitude.


Le deuxième exemple fournit la puissance du numéro d'entrée. n*-ndevrait être n*-1. Je supprimerais complètement l'exemple, car les conversions de type et l'appel de méthode sont très inefficaces par rapport à la simplicité du premier exemple. Même la bizarrerie de JS ne peut pas aider ici
Gust van de Wal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.