JavaScript'te Negatif Sayıya Pozitif Sayı?


104

Temel olarak, abs'in tersi. Sahip olursam:

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

Hangi konsolun her zaman pozitif bir sayı döndürdüğü önemli değil. Bunu nasıl düzeltirim?

Eğer yaparsam:

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')
}

o tho çalışır, ancak "KURU" değildir ve sadece bir kod bloğunun tamamını bir -.


4
Eminim bunun için bir jQuery eklentisi vardır.
Jakub Hampl

Yanıtlar:


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

Bununla birlikte, kodunuz için

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

Bulunan dizin 3 ve slideNum 3 ise,
3 <3-1 => false
yani slideNum pozitif kalır ??

Bana daha çok mantık hatası gibi görünüyor.



30

Pozitifin negatife veya negatifin pozitife döndürülmesi için temel formül:

i - (i * 2)

32
Neyin var i * -1? Ayrıca, bunun asıl soruyu yanıtladığından emin değilim.
Andrew Barber

5
Mimari olarak bağımlı, ancak 0 - daha hızlı olabilirim
Ben Taliadoros

@AndrewBarber i * -1, Chrome'un mevcut sürümünde çalışmıyor gibi görünüyor. -Math.abs (1) 'i kullanın, bunun neden işe yaradığından emin olmasanız da, umarım birisi nedenini genişletebilir.
Philip Rollins

@PhilipRollins i * -1her zaman çalışacak. Nasıl denediğini bilmiyorum, belki biraz yazım hatası yapmışsın. Ama ... Pozitiften negatife veya negatifden pozitife çevirmek (veya ) i = -iyerine neyin yanlış ? i = i * -1i *= -1
Diego ZoracKy

@DiegoZoracKy Ben de öyle düşünmüştüm, ama çalıştırdığım krom sürümü için değil ve firefox'ta çalıştı, bu yüzden bir yazım hatası söz konusu değil. Şu anda Linux'tayım, ancak teorinizi krom üzerinde test etmekte özgürsünüz. Krom otomatik güncellemelerini aklınızda bulundurun, böylece herhangi bir hata düzeltmesi zaten uygulanacak ve yeni hatalar topluluğa gönderilecektir, yani bu yalnızca birkaç gün süren ve şimdi sonsuza kadar düzeltilen bir hata olabilir.
Philip Rollins

9

JavaScript'te bir sayının negatif sürümünü almak için her zaman ~ bitsel operatörü .

Örneğin, varsa a = 1000ve bunu negatife dönüştürmeniz gerekiyorsa, aşağıdakileri yapabilirsiniz:

a = ~a + 1;

Hangi avarlığa neden olur -1000.


Bu, eksi 1 ile çarpmaktan daha mı hızlı?
ryandawkins

Dürüst olacağımdan emin değilim, incelemeniz gereken bir şey.
Benjamin Williams

@RyanDawkins bu -1 ile çarpmaktan daha hızlı olmayacak. Javascript, C'nin yaptığı gibi doğal olarak boole operatörlerine sahip değildir. Bu nedenle, bir boole işlemi yapmak için, JS'nin başlık altındaki türler arasında dönüştürme yapması gerekir.
spinlock

2
Neden olmasın a = -a?
Diego ZoracKy

Bitsel bir sayıyı tam olarak olumsuzlamaz. ~1000olduğu -1001değil -1000.
brentonstrine

7
var x = 100;
var negX = ( -x ); // => -100

1
Lütfen yanıtınızı düzenleyen bazı açıklamalar ekleyin, yalnızca kod yanıtından kaçının
GGO

1
@GGO ... Bunun nasıl net olmadığından emin değilim ama eminim: Değerin önüne eksi işareti ekleyip sonra onu parantez içine alarak değer değerlendirilir ... sonuç Negasyon değer.
tpayne84

6

Kontrolün bedenine girdiğinden emin misin if? Durum her zaman olduğu gibi ifdoğru mu? Çünkü yoksa, bedeni ifasla idam edilmeyecek veslideNum pozitif kalacaktır. Muhtemelen gördüğünüz şeyin bu olduğuna dair bir tahminde bulunacağım.

Aşağıdakileri Firebug'da denersem işe yarıyor gibi görünüyor:

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

slideNum *= -1ayrıca çalışmalıdır. Olması gerektiği gibi Math.abs(slideNum) * -1.


Az önce yaptım if($this.find('.pdxslide-activeSlide').index() < slideNum-1){ slideNum *= -1 }ve hala o console.log'da olumlu geri dönüyorum?
Oscar Godson

@Oscar, Vivin'in söylediği $this.find('.pdxslide-activeSlide').index() < slideNum-1her zaman yanlıştır.
David Tang

4

Math.Abs ​​* -1 kullanmak istemiyorsanız şu basit if ifadesini yapabilirsiniz: P

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

Elbette bunu böyle bir işlev yapabilirsin

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

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

Bu yardımcı olur umarım! Math.abs muhtemelen sizin için çalışacaktır, ancak bu kadar az değilse


Bir soruyu cevaplamadan önce ne zaman sorulduğunu da düşünmelisiniz. Bu soru neredeyse 5 yaşında. Dolayısıyla, teknoloji değişmedikçe ve şimdi daha iyi / daha uygun bir yanıt yoksa, genellikle başka bir yanıt sunarak çok fazla katma değer olmaz.
Igor

1
Ben şahsen her zaman eski yığın taşma sorularına bakıyorum. Elbette bu bir profesyonel için çok yardımcı olmayacaktır, ancak belki yeni başlayanlar bahşişi takdir edebilir! Bununla birlikte, en kolay yol gerçekten yukarıdaki gibidir: -Math.Abs ​​(-3) Yukarıda tartışıldığı gibi Math.Abs ​​herhangi bir değeri pozitif çevirir. Sonra negatif önek onu negatif yapar
Ash Pettit

Olumlu oy verildi. Şahsen bu cevabı takdir ediyorum ve değerli buldum. Herkesten öğrenebilirsin.
jeremysawesome

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

Sonuç: -10

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

Sonuç: 10

Negatif 1'e bölerseniz, her zaman sayınızı her iki şekilde de çevirir.


3

Javascript'in bunun için özel bir operatörü vardır: tekli olumsuzlama .

TL; DR: Eksi işareti!

Bir sayıyı olumsuzlamak için, -mümkün olan en sezgisel şekilde önüne koymanız yeterlidir . Bir fonksiyon yazmaya, Math.abs()çarpma işlemine -1veya bitsel operatörü kullanmaya gerek yok .

Tekli olumsuzlama, sayı değişmezleri üzerinde çalışır:

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

Değişkenlerle de çalışır:

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

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

Gruplama operatörünü (diğer adıyla parantezler:

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)

Yukarıdakilerin tümü bir değişkenle de çalışır.




1

Negatif diziyi pozitife veya tersine çevirir

function negateOrPositive(arr) {
    arr.map(res => -res)
};

0

Vanilyalı javascript

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

Nerede numara yukarıda pozitif sayıdır dönüştürmek niyetinde

Bu kod, -1 ile çarparak sadece pozitif sayıları negatif sayılara dönüştürecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.