Antworten:
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.
Was ist mit x *= -1? Ich mag seine Einfachheit.
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?!"
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.
ximmer positiv. Ich entschuldige mich @myusuf.
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;
Wenn Sie interessanten Code schreiben möchten, den niemand sonst jemals aktualisieren kann, versuchen Sie Folgendes:
~ --x
~Operator konvertiert die Zahl in eine 32-Bit-Ganzzahl. Wenn Sie einen Schwimmer als Eingabe haben, wird dieser abgespritzt.
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); // 54Drehen Sie eine beliebige Zahl negativ
let x = 54;
let y = -54;
let resultx = -Math.abs(x); // -54
let resulty = -Math.abs(y); // -54Invertieren Sie eine beliebige Zahl
let x = 54;
let y = -54;
let resultx = -(x); // -54
let resulty = -(y); // 54Negativ bis positiv
var X = -10 ;
var number = Math.abs(X); //result 10
Positiv bis negativ
var X = 10 ;
var number = (X)*(-1); //result -10
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.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
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. : /
Mein minimaler Ansatz
Zum Umwandeln einer negativen Zahl in eine positive und umgekehrt
var num = -24;
num -= num*2;
console.log(num)
// result = 24
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
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);
Für eine funktionale Programmierung hat Ramda hierfür eine schöne Methode. Die gleiche Methode funktioniert von positiv nach negativ und umgekehrt.
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.
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