Konvertieren Sie eine negative Zahl in eine positive in JavaScript

308

Gibt es in JavaScript eine mathematische Funktion, die Zahlen in positive Werte umwandelt?

Dave
quelle

Antworten:

704

Sie könnten dies verwenden ...

Math.abs(x)

Math​.abs()| MDN

ChrisNel52
quelle
1
Vielleicht möchten Sie sogar ~ x + 1 berücksichtigen. Es ist ziemlich schnell, aber nicht klar, was es tut. Schlug dies auf, um den Unterschied zu zeigen: jsperf.com/absolute-int
omgaz
22
@omgaz Sie sind nicht gleich ... var x = -100; ~x+1 === 100aber var x = 100; ~x+1 === -100. Math.absmacht es immer positiv, während die Ergänzung einfach das Zeichen umkehrt.
jduncanator
Vielleicht möchten Sie sogar -x in Betracht ziehen. Es ist ziemlich schnell!
Amara
93

Was ist mit x *= -1? Ich mag seine Einfachheit.

gnclmorais
quelle
17
Dies ist zwar einfach, geht jedoch davon aus, dass die Zahl immer negativ ist. Wenn der Anwendungsfall so ist, dann ist es fantastisch. Ansonsten würde ich zur Vorsicht raten.
Myusuf
4
Ich bin nicht einverstanden @myusuf. Jede Nummer, die ist, xwird umgedreht. Wenn x = 23und in diese Gleichung hineingeschoben xwird, ist gleich -23. Mit den Worten von Herrn Escalante: "Ein positives mal ein negatives entspricht einem negativen. Ein negatives mal ein negatives entspricht einem positiven." ... "Wie erreiche ich diese Kiiiiiiids?!"
ExcellentSP
2
Genau @Shane gestern. Wenn x=23, dann wird es -23. Wie die Frage lautet: "Konvertieren Sie eine negative Zahl in eine positive Zahl in JS", aber das Obige wird jede Zahl umdrehen, sei es positiv oder negativ.
Myusuf
2
Verstanden. Meine Interpretation Ihres Kommentars war im Zusammenhang mit dem Umdrehen der Nummer und nicht ximmer positiv. Ich entschuldige mich @myusuf.
ExcellentSP
1
Denken Sie daran, dass diese Lösung nicht für Float-Zahlen gilt, sondern nur den Dezimalteil
Oscar Luza
46

Math.abs(x)oder wenn Sie sicher sind , dass der Wert vor der Konvertierung negativ ist, stellen Sie einfach ein reguläres Minuszeichen voran : x = -x.

orlp
quelle
29

Das Minuszeichen (-) kann positive Zahlen in negative Zahlen und negative Zahlen in positive Zahlen umwandeln. x=-yist visueller Zucker für x=(y*-1).

var y = -100;
var x =- y;
Autobahn des Lebens
quelle
15
unsigned_value = Math.abs(signed_value);
Marc B.
quelle
12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

Ich finde diese Lösung leicht zu verstehen.

MarkD
quelle
8

Wenn Sie interessanten Code schreiben möchten, den niemand sonst jemals aktualisieren kann, versuchen Sie Folgendes:

~ --x

Kyle
quelle
1
Dies funktioniert jedoch nicht mit Gleitkommawerten ... und der Wert von x ändert sich ebenfalls.
Alexis Wilke
Ich denke, wenn Sie nicht ändern können x: ~ --x; ++ x
Kyle
1
Kyle, der ~Operator konvertiert die Zahl in eine 32-Bit-Ganzzahl. Wenn Sie einen Schwimmer als Eingabe haben, wird dieser abgespritzt.
Alexis Wilke
7

Ich weiß, dass dies etwas spät ist, aber für Leute, die damit zu kämpfen haben, können Sie die folgenden Funktionen verwenden:

  • Schalten Sie eine beliebige Zahl positiv

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • Drehen Sie eine beliebige Zahl negativ

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • Invertieren Sie eine beliebige Zahl

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54
Adeel Imran
quelle
6

Negativ bis positiv

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

Positiv bis negativ

var X = 10 ;
var number = (X)*(-1);       //result -10
Bashirpour
quelle
Ich sehe, was Sie zeigen wollen, aber die Art und Weise, wie Sie es ausdrücken, ist verwirrend. Vielleicht sollten Sie sagen: zu positiv: verwenden Sie abs, zu negativ: abs (x) * -1. Auf diese Weise implizieren Sie nicht, was das frühere X-Zeichen ist.
Dionys
5

Das Multiplizieren mit (-1) ist der schnellste Weg, um eine negative Zahl in eine positive umzuwandeln. Aber Sie müssen aufpassen, dass mein Fehler nicht von einer positiven in eine negative Zahl umgewandelt wird! Daher ist eine zusätzliche Überprüfung erforderlich ...

Dann ist Math.abs, Math.floor und parseInt am langsamsten.

Geben Sie hier die Bildbeschreibung ein

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

Kombinieren
quelle
1
Einige von uns vergessen, wie nützlich grundlegende Mathematik in solchen Fällen sein kann. Vielen Dank, dass Sie mich an diese Einfachheit erinnert haben.
Alexander Dixon
2

Ich habe so etwas selbst gemacht.

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

Es prüft, ob die Zahl negativ ist, und multipliziert sie mit -1. Dies gibt einen Wert zurück. Es liegt an Ihnen, ob Sie ihn erfassen. Wenn Sie es etwas zuweisen möchten, sollten Sie wahrscheinlich Folgendes tun:

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

Aber es kommt wirklich darauf an, was Ihr Ziel ist. Für mich war es einfach, es positiv zu machen, wenn es negativ ist, sonst nichts zu tun. Daher das '' im Code. In diesem Fall habe ich einen tertiären Operator verwendet, weil ich wollte, es könnte sehr gut sein:

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

Ich habe hier die bitweise Lösung gesehen und wollte auch diese kommentieren.

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

Diese Lösung ist meiner Meinung nach sehr ausgefallen, wir könnten sie so umschreiben:

~(num = num-1);

In einfachen Worten, wir nehmen die negative Zahl, nehmen eine davon weg und invertieren sie dann bitweise. Wenn wir es normalerweise bitweise invertiert hätten, würden wir einen Wert 1 zu klein bekommen. Sie können dies auch tun:

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

Das wird dasselbe tun, aber zuerst invertieren und dann 1 zur positiven Zahl addieren. Obwohl Sie dies NICHT tun können:

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

Dies funktioniert aufgrund der Priorität nicht . Postfix-Operatoren, wie num++sie vor ~ ausgewertet werden, und der Grund, ++numwarum das Präfix nicht funktioniert, obwohl es dieselbe Priorität wie bitweises NOT (~) hat, liegt daran, dass es von rechts nach links ausgewertet wird. Ich habe versucht, sie auszutauschen, aber es scheint, dass das Präfix im Vergleich zu bitweise NICHT etwas pingelig ist. Die +1 funktioniert, weil '+' eine höhere Priorität hat und später ausgewertet wird.

Ich fand diese Lösung ziemlich lustig und beschloss, sie zu erweitern, da sie nur hineingeworfen wurde und die Leute, die sie betrachteten, sie wahrscheinlich ignorierten. Obwohl ja, funktioniert es nicht mit Schwimmern.

Ich hoffe, dass sich dieser Beitrag nicht von der ursprünglichen Frage entfernt hat. : /

Atspulgs
quelle
2

Mein minimaler Ansatz

Zum Umwandeln einer negativen Zahl in eine positive und umgekehrt

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

Mabweh Isaac
quelle
0

Sie können den Operator ~ verwenden , der die Zahl logisch in ein Negativ konvertiert und 1 zum Negativ addiert:

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

Herr X
quelle
0

Ich kenne einen anderen Weg, es zu tun. Diese Technik funktioniert negativ bis positiv und umgekehrt

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

Und umgekehrt:

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

LIVE CODE:

// 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);

Tarryk Ttmm
quelle
Das beantwortet die Frage nicht. Dave fragt nach einer Funktion, die den Wert negativ in positiv und positiv in positiv ändert .
RaphaMex
Seine Frage lautet: "Gibt es in JavaScript eine mathematische Funktion, die Zahlen in positive Werte umwandelt?" Er erwähnt nicht positiv bis positiv. Er erwähnt nur negativ bis positiv. Warum sollten Sie positiv in positiv umwandeln wollen? Der Wert wäre der gleiche.
Tarryk Ttmm
Sie können in einem Kommentar unter der Frage um Klarstellung bitten. Auf jeden Fall gibt es eine akzeptierte Antwort, die die richtige ist. Sie können es erneut lesen und sehen, dass es eine integrierte Funktion gibt, die ... positiv in positiv umwandelt.
RaphaMex
0

Für eine funktionale Programmierung hat Ramda hierfür eine schöne Methode. Die gleiche Methode funktioniert von positiv nach negativ und umgekehrt.

https://ramdajs.com/docs/#negate

racemisch
quelle
0

Wenn Sie möchten, dass die Zahl immer positiv ist, können Sie dies tun.

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

Sie könnten dies auch versuchen, aber ich empfehle es nicht:

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

Das Problem dabei ist, dass Sie möglicherweise die Zahl in negativ ändern, dann in eine Zeichenfolge konvertieren und das - aus der Zeichenfolge entfernen und dann wieder in int konvertieren. Was ich vermuten würde, würde mehr Verarbeitung erfordern, als nur die andere Funktion zu verwenden.

Ich habe dies in PHP getestet und die erste Funktion ist schneller, aber manchmal macht JS einige verrückte Dinge, also kann ich nicht sicher sagen.

Dillon Burnett
quelle
Das zweite Beispiel gibt die Potenz der Eingangsnummer aus. n*-nsollte sein n*-1. Ich würde das Beispiel jedoch insgesamt entfernen, da die Typkonvertierungen und der Methodenaufruf im Vergleich zur Einfachheit des ersten Beispiels sehr ineffizient sind. Selbst JS 'Skurrilität kann hier unmöglich helfen
Gust van de Wal