Czy w JavaScript jest funkcja matematyczna, która konwertuje liczby na wartości dodatnie?
javascript
Dave
źródło
źródło
var x = -100; ~x+1 === 100
alevar x = 100; ~x+1 === -100
.Math.abs
zawsze czyni to pozytywnym, a przyjmowanie uzupełnienia po prostu odwraca znak.Co
x *= -1
? Podoba mi się jego prostota.źródło
x
zostanie odrzucona. Jeślix = 23
i zostanie wbity w to równanie,x
wó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.x
zawsze pozytywnych. Moje przeprosiny @myusuf.Math.abs(x)
lub jeśli jesteś pewna wartość jest ujemna przed konwersją prostu poprzedź regularny znak minus:x = -x
.źródło
Znak minus (-) może konwertować liczby dodatnie na liczby ujemne, a liczby ujemne na liczby dodatnie.
x=-y
jest wizualnym cukrem dlax=(y*-1)
.źródło
źródło
Uważam to rozwiązanie za łatwe do zrozumienia.
źródło
Jeśli chcesz napisać interesujący kod, którego nikt inny nie może zaktualizować, spróbuj tego:
~ --x
źródło
~
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ą
Włącz dowolną liczbę ujemną
Odwróć dowolną liczbę
źródło
Negatywny na pozytywny
Pozytywne na negatywne
źródło
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
źródło
Zrobiłem coś takiego sam.
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:
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ć:
Widziałem tutaj rozwiązanie bitowe i też chciałem je skomentować.
Moim zdaniem ta dusza jest bardzo fantazyjna, moglibyśmy ją przepisać w następujący sposób:
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ć:
To zrobi to samo, ale najpierw odwróci, a następnie doda 1 do liczby dodatniej. Chociaż NIE MOŻESZ tego zrobić:
To nie zadziała z powodu pierwszeństwa , operatory postfiksów, takie jak
num++
byłyby oceniane przed ~, a prefiks przyczyny++num
nie 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. : /
źródło
Moje minimalne podejście
Do konwersji liczby ujemnej na dodatnią i odwrotnie
źródło
Możesz użyć operatora ~ , który logicznie konwertuje liczbę na ujemną i dodaje 1 do ujemnej:
źródło
Znam inny sposób na zrobienie tego. Ta technika działa negatywnie na pozytywną i odwrotnie
Nawzajem:
KOD NA ŻYWO:
źródło
Dla funkcjonalnego programowania Ramda ma na to dobrą metodę. Ta sama metoda działa, przechodząc od pozytywnej do negatywnej i odwrotnie.
https://ramdajs.com/docs/#negate
źródło
Jeśli chcesz, aby liczba zawsze była dodatnia, bez względu na to, co możesz to zrobić.
Możesz także spróbować tego, ale nie polecam tego:
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.
źródło
n*-n
powinno 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