Bilangan Positif menjadi Bilangan Negatif di JavaScript?

103

Pada dasarnya, perut bagian belakang. Jika saya memiliki:

if ($this.find('.pdxslide-activeSlide').index() < slideNum - 1) {
  slideNum = -slideNum
}
console.log(slideNum)

Tidak peduli konsol apa selalu mengembalikan angka positif. Bagaimana cara mengatasinya?

Jika aku melakukan:

if ($this.find('.pdxslide-activeSlide').index() < slideNum - 1) {
  _selector.animate({
    left: (-slideNum * sizes.images.width) + 'px'
  }, 750, 'InOutPDX')
} else {
  _selector.animate({
    left: (slideNum * sizes.images.width) + 'px'
  }, 750, 'InOutPDX')
}

itu bekerja, tetapi tidak "KERING" dan hanya bodoh memiliki seluruh blok kode HANYA untuk a -.

Oscar Godson
sumber
4
Saya yakin ada plugin jQuery untuk itu.
Jakub Hampl

Jawaban:

193
Math.abs(num) => Always positive
-Math.abs(num) => Always negative

Namun, Anda menyadari itu untuk kode Anda

if($this.find('.pdxslide-activeSlide').index() < slideNum-1){ slideNum = -slideNum }
console.log(slideNum)

Jika index yang ditemukan adalah 3 dan slideNum adalah 3,
maka 3 <3-1 => false
sehingga slideNum tetap positif ??

Bagi saya ini lebih seperti kesalahan logika.

RichardTheKiwi
sumber
84

Kebalikan dari abs adalah Math.abs(num) * -1.

Jakub Hampl
sumber
10
Lebih pendek:return -Math.abs(num);
sarunast
29

Rumus dasar untuk membalik positif ke negatif atau negatif ke positif:

i - (i * 2)
Blake
sumber
32
Ada apa dengan i * -1? Juga, saya tidak yakin ini menjawab pertanyaan sebenarnya.
Andrew Barber
5
Ini bergantung secara arsitektural, tetapi 0 - saya mungkin lebih cepat
Ben Taliadoros
@AndrewBarber i * -1tampaknya tidak berfungsi pada versi chrome saat ini. Gunakan -Math.abs (1) tidak yakin mengapa ini berhasil, semoga seseorang dapat memperluas alasannya.
Philip Rollins
@PhilipRollins i * -1akan selalu berfungsi. saya tidak tahu bagaimana Anda mencoba, mungkin Anda salah ketik. Tapi ... apa salahnya i = -idaripada i = i * -1(atau i *= -1) membalikkan positif ke negatif atau negatif ke positif?
Diego ZoracKy
@DiegoZoracKy Saya juga berpikir begitu, tetapi tidak untuk versi chrome yang saya jalankan dan berfungsi di firefox sehingga kesalahan ketik tidak mungkin terjadi. Saya menggunakan Linux sekarang, tetapi Anda bebas menguji teori Anda di chrome. Perlu diingat bahwa pembaruan otomatis chrome sehingga perbaikan bug apa pun akan diterapkan dan bug baru apa pun akan dikirim ke komunitas, yang berarti ini bisa menjadi bug yang hanya berlangsung beberapa hari dan sekarang telah diperbaiki selamanya.
Philip Rollins
9

Untuk mendapatkan versi negatif dari angka di JavaScript, Anda selalu dapat menggunakan ~operator bitwise.

Misalnya, jika Anda sudah a = 1000dan ingin mengubahnya menjadi negatif, Anda dapat melakukan hal berikut:

a = ~a + 1;

Yang akan menghasilkan akeberadaan -1000.

Benjamin Williams
sumber
Apakah ini lebih cepat daripada mengalikan dengan negatif 1?
ryandawkins
Saya tidak yakin untuk jujur, sesuatu yang harus Anda selidiki.
Benjamin Williams
@RyanDawkins ini tidak akan lebih cepat dari mengalikan dengan -1. Javascript tidak memiliki operator boolean seperti C. Jadi, untuk melakukan operasi boolean, JS harus melakukan konversi antar tipe di bawah kap.
spinlock
2
Mengapa tidak a = -a?
Diego ZoracKy
Bitwise tidak meniadakan angka dengan tepat. ~1000adalah -1001, tidak -1000.
brentonstrine
7
var x = 100;
var negX = ( -x ); // => -100
tpayne84.dll
sumber
1
Tambahkan beberapa penjelasan yang mengedit jawaban Anda, hindari jawaban hanya kode
GGO
1
@GGO ... Saya tidak yakin bagaimana ini belum jelas, tapi yakin: Dengan menambahkan tanda minus di depan nilai, lalu membungkusnya dalam tanda kurung, nilainya dievaluasi ... hasilnya adalah Negasi dari nilai.
tpayne84
6

Apakah Anda yakin bahwa kendali masuk ke dalam tubuh if? Seperti apakah kondisi ini ifpernah benar? Karena jika tidak, tubuh ifwasiat tidak akan pernah dieksekusi dan slideNumakan tetap positif. Saya berani menebak bahwa ini mungkin yang Anda lihat.

Jika saya mencoba yang berikut ini di Firebug, tampaknya berhasil:

>>> i = 5; console.log(i); i = -i; console.log(i);
5
-5

slideNum *= -1juga harus bekerja. Seperti seharusnya Math.abs(slideNum) * -1.

Vivin Paliath
sumber
Saya baru saja melakukannya if($this.find('.pdxslide-activeSlide').index() < slideNum-1){ slideNum *= -1 }dan saya masih kembali positif di console.log itu?
Oscar Godson
@Oscar, apa yang dikatakan Vivin adalah itu $this.find('.pdxslide-activeSlide').index() < slideNum-1selalu salah.
David Tang
4

Jika Anda tidak ingin menggunakan Math.Abs ​​* -1 Anda dapat menggunakan pernyataan if sederhana ini: P

if (x > 0) {
    x = -x;
}

Tentu saja Anda bisa membuat fungsi seperti ini

function makeNegative(number) {
    if (number > 0) {
        number = -number;
    }
}

makeNegative (-3) => -3 makeNegative (5) => -5

Semoga ini membantu! Math.abs kemungkinan akan bekerja untuk Anda tetapi jika tidak sekecil ini

Ash Pettit
sumber
Sebelum menjawab pertanyaan, Anda juga harus mempertimbangkan kapan pertanyaan itu diajukan. Pertanyaan ini hampir berumur 5 tahun. Jadi, kecuali teknologi telah berubah dan sekarang ada jawaban yang lebih baik / lebih tepat biasanya tidak banyak nilai tambah dengan menawarkan jawaban lain.
Igor
1
Saya pribadi melihat-lihat pertanyaan stack overflow sepanjang waktu. Tentu ini tidak akan terlalu membantu untuk seorang profesional tetapi mungkin seorang pemula mungkin menghargai tipnya! Yang mengatakan cara termudah adalah seperti di atas -Math.Abs ​​(-3) Seperti dibahas di atas Math.Abs ​​mengubah nilai apa pun menjadi positif. Kemudian awalan negatif menjadikannya negatif
Ash Pettit
Suara positif. Secara pribadi saya menghargai jawaban ini dan menganggapnya berharga. Anda bisa belajar dari siapa saja.
jeremysawesome
3
var i = 10;
i = i / -1;

Hasil: -10

var i = -10;
i = i / -1;

Hasil: 10

Jika Anda membagi dengan negatif 1, bilangan Anda akan selalu terbalik.

Jeff Price
sumber
3

Javascript memiliki operator khusus untuk ini: negasi unary .

TL; DR: Itu tanda minus!

Untuk meniadakan angka, cukup awali dengan dengan -cara yang paling intuitif. Tidak perlu menulis fungsi, gunakan Math.abs()perkalian dengan -1atau gunakan operator bitwise.

Negasi unary bekerja pada literal bilangan:

let a = 10;  // a is `10`
let b = -10; // b is `-10`

Ia bekerja dengan variabel juga:

let x = 50;
x = -x;      // x is now `-50`

let y = -6;
y = -y;      // y is now `6`

Anda bahkan dapat menggunakannya beberapa kali jika Anda menggunakan operator pengelompokan (alias tanda kurung:

l = 10;       // l is `10`
m = -10;      // m is `-10`
n = -(10);    // n is `-10`
o = -(-(10)); // o is `10`
p = -(-10);   // p is `10` (double negative makes a positive)

Semua hal di atas bekerja dengan variabel juga.

brentonstrine.dll
sumber
2
num * -1

Ini akan melakukannya untuk Anda.

Vibhor Dube
sumber
1

Gunakan 0 - x

x menjadi angka yang ingin Anda balikkan

milesman34
sumber
3
hanya -xmencukupi.
Antti Haapala
1
Hanya -x menghasilkan -0. Solusi ini lebih baik jika mungkin ada zeros-
chrismarx
1

Ini akan mengubah array negatif menjadi positif atau sebaliknya

function negateOrPositive(arr) {
    arr.map(res => -res)
};
Flash Noob
sumber
0

Dalam vanilla javascript

if(number > 0)
  return -1*number;

Dimana nomor atas adalah angka positif yang ingin Anda konversi

Kode ini hanya akan mengubah bilangan positif menjadi bilangan negatif dengan mengalikannya dengan -1

perfo
sumber