Odpowiedzi:
var x = -100; ~x+1 === 100ale var x = 100; ~x+1 === -100. Math.abszawsze czyni to pozytywnym, a przyjmowanie uzupełnienia po prostu odwraca znak.
Co x *= -1? Podoba mi się jego prostota.
xzostanie odrzucona. Jeśli x = 23i zostanie wbity w to równanie, xwówczas będzie równy -23. Według słów pana Escalante: „Dodatni razy ujemny równa się ujemnemu. Negatywny razy ujemny równa się dodatniej”. ... „Jak dotrzeć do tych kiiiiiiidów ?!”
x=23, to stanie się -23. W miarę zadawania pytania „Konwertuj liczbę ujemną na liczbę dodatnią w JS”, ale powyższe spowoduje odwrócenie dowolnej liczby, czy to dodatniej, czy ujemnej.
xzawsze pozytywnych. Moje przeprosiny @myusuf.
Znak minus (-) może konwertować liczby dodatnie na liczby ujemne, a liczby ujemne na liczby dodatnie. x=-yjest wizualnym cukrem dla x=(y*-1).
var y = -100;
var x =- y;
Jeśli chcesz napisać interesujący kod, którego nikt inny nie może zaktualizować, spróbuj tego:
~ --x
~operator konwertuje liczbę na 32-bitową liczbę całkowitą. Jeśli masz liczbę zmiennoprzecinkową jako dane wejściowe, zostanie ona zablokowana.
Wiem, że to trochę za późno, ale dla osób mających z tym problem, możesz użyć następujących funkcji:
Włącz dowolną liczbę dodatnią
let x = 54;
let y = -54;
let resultx = Math.abs(x); // 54
let resulty = Math.abs(y); // 54Włącz dowolną liczbę ujemną
let x = 54;
let y = -54;
let resultx = -Math.abs(x); // -54
let resulty = -Math.abs(y); // -54Odwróć dowolną liczbę
let x = 54;
let y = -54;
let resultx = -(x); // -54
let resulty = -(y); // 54Negatywny na pozytywny
var X = -10 ;
var number = Math.abs(X); //result 10
Pozytywne na negatywne
var X = 10 ;
var number = (X)*(-1); //result -10
Mnożenie przez (-1) to najszybszy sposób na konwersję liczby ujemnej na dodatnią. Ale musisz uważać, aby nie zamienić mojej pomyłki na liczbę dodatnią na ujemną! Potrzebna jest więc dodatkowa kontrola ...
Następnie Math.abs, Math.floor i parseInt są najwolniejsze.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
Zrobiłem coś takiego sam.
num<0?num*=-1:'';
Sprawdza, czy liczba jest ujemna, a jeśli tak, pomnóż ją przez -1. Zwraca wartość, która zależy od ciebie, jeśli ją uchwycisz. Jeśli chcesz coś do tego przypisać, prawdopodobnie powinieneś zrobić coś takiego:
var out = num<0?num*=-1:num; //I think someone already mentioned this variant.
Ale to naprawdę zależy od tego, jaki jest twój cel. Dla mnie było to proste, zrób to pozytywnie, jeśli negatywne, w przeciwnym razie nic nie rób. Stąd „” w kodzie. W tym przypadku użyłem trzeciego operatora, ponieważ chciałem, może to być:
if(num<0)num*=-1;
Widziałem tutaj rozwiązanie bitowe i też chciałem je skomentować.
~--num; //Drawback for this is that num original value will be reduced by 1
Moim zdaniem ta dusza jest bardzo fantazyjna, moglibyśmy ją przepisać w następujący sposób:
~(num = num-1);
Mówiąc najprościej, bierzemy liczbę ujemną, odejmujemy ją, a następnie odwracamy bitowo. Gdybyśmy odwrócili bitowo normalnie, otrzymalibyśmy wartość 1 za małą. Możesz także to zrobić:
~num+1; //Wont change the actual num value, merely returns the new value
To zrobi to samo, ale najpierw odwróci, a następnie doda 1 do liczby dodatniej. Chociaż NIE MOŻESZ tego zrobić:
~num++; //Wont display the right value.
To nie zadziała z powodu pierwszeństwa , operatory postfiksów, takie jak num++byłyby oceniane przed ~, a prefiks przyczyny ++numnie działałby, nawet jeśli ma taki sam priorytet jak bitowe NOT (~), ponieważ jest oceniany od prawej do lewej. Próbowałem je zamienić, ale wygląda na to, że prefiks jest nieco wybredny w porównaniu do bitowego NIE. +1 będzie działać, ponieważ „+” ma wyższy priorytet i zostanie oceniony później.
Uznałem, że to rozwiązanie jest raczej zabawne, i postanowiłem je rozwinąć, ponieważ zostało tam wrzucone i ludzie, którzy na niego patrzą, prawdopodobnie go ignorują. Chociaż tak, nie będzie działać z pływakami.
Mam nadzieję, że ten post nie odszedł od pierwotnego pytania. : /
Moje minimalne podejście
Do konwersji liczby ujemnej na dodatnią i odwrotnie
var num = -24;
num -= num*2;
console.log(num)
// result = 24
Możesz użyć operatora ~ , który logicznie konwertuje liczbę na ujemną i dodaje 1 do ujemnej:
var x = 3;
x = (~x + 1);
console.log(x)
// result = -3
Znam inny sposób na zrobienie tego. Ta technika działa negatywnie na pozytywną i odwrotnie
var x = -24;
var result = x * -1;
Nawzajem:
var x = 58;
var result = x * -1;
KOD NA ŻYWO:
// 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);
Dla funkcjonalnego programowania Ramda ma na to dobrą metodę. Ta sama metoda działa, przechodząc od pozytywnej do negatywnej i odwrotnie.
Jeśli chcesz, aby liczba zawsze była dodatnia, bez względu na to, co możesz to zrobić.
function toPositive(n){
if(n < 0){
n = n * -1;
}
return n;
}
var a = toPositive(2); // 2
var b = toPositive(-2); // 2
Możesz także spróbować tego, ale nie polecam tego:
function makePositive(n){
return Number((n*-n).toString().replace('-',''));
}
var a = makePositive(2); // 2
var b = makePositive(-2); // 2
Problem polega na tym, że możesz zmienić liczbę na ujemną, a następnie przekonwertować na ciąg i usunąć - z ciągu, a następnie przekonwertować z powrotem na int. Sądzę, że zajęłoby to więcej przetwarzania niż użycie innej funkcji.
Przetestowałem to w php i pierwsza funkcja jest szybsza, ale czasami JS robi jakieś szalone rzeczy, więc nie mogę być tego pewien.
n*-npowinno być n*-1. Jednak całkowicie usunę ten przykład, ponieważ konwersje typów i wywołania metod są bardzo nieefektywne w porównaniu z prostotą pierwszego przykładu. Nawet dziwactwo JS nie może tu pomóc