Negatif bir sayıyı JavaScript'te pozitif bir sayıya dönüştürme


308

JavaScript'te sayıları pozitif değere dönüştüren bir matematik işlevi var mı?

Yanıtlar:


704

Bunu kullanabilirsiniz ...

Math.abs(x)

Math​.abs()| MDN


1
~ X + 1 bile düşünebilirsiniz. Oldukça hızlı, ama ne yaptığı konusunda net değil. Farkı göstermek için bunu
çırptı

22
@omgaz Aynı değiller ... var x = -100; ~x+1 === 100ama var x = 100; ~x+1 === -100. Math.absher zaman olumlu yapar, tamamlayıcıları almak ise sadece işareti tersine çevirir.
jduncanator

Hatta -x'i düşünmek isteyebilirsiniz. Çok hızlı!
amara

93

Ne olmuş x *= -1? Basitliğini seviyorum.


17
Bu basit olsa da, sayının her zaman negatif olacağı varsayımı yapar. Kullanım durumu böyle ise, o zaman onun harika. Aksi takdirde dikkatli olmanızı öneririm.
myusuf

4
@Myusuf'a katılmıyorum. Herhangi bir sayı xçevrilecek. Eğer x = 23ve bu denkleme itilirse, xo zaman eşit olacaktır -23. Bay Escalante'nin sözleriyle, "Olumlu bir zaman, bir negatif, bir negatiftir, bir negatif zaman, bir negatif, bir pozitiftir." ... "Bu kiiiiiiidlere nasıl ulaşabilirim ?!"
ExcellentSP

2
Dün @Shane. Eğer x=23, o zaman -23 olur. Soru ilerledikçe, 'Negatif bir sayıyı JS'de pozitif bir sayıya dönüştürün', ancak yukarıdakiler pozitif veya negatif olsun, herhangi bir sayıyı çevirir.
myusuf

2
Anladım. Yorumunuz hakkındaki yorumum, sayıyı ters çevirme ve xher zaman olumlu yapmayan bağlamındaydı . Özürlerim @myusuf.
Mükemmel SP

1
bu çözümün Float numaraları için geçerli olmadığını, yalnızca ondalık kısmı aldığını hatırlatın
Oscar Luza

46

Math.abs(x)eğer yoksa belirli bir değer sadece normal bir eksi işareti prepend dönüşümden önceki negatiftir: x = -x.


29

Eksi işareti (-) pozitif sayıları negatif sayılara ve negatif sayıları pozitif sayılara dönüştürebilir. x=-ygörsel şekerdir x=(y*-1).

var y = -100;
var x =- y;


12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

Bu çözümü kolay anlaşılır buluyorum.


8

Başka hiç kimsenin güncelleyemeyeceği ilginç bir kod yazmak istiyorsanız şunu deneyin:

~ -X


1
Bu kayan noktalarla çalışmaz ... ve x'in değeri de değişir.
Alexis Wilke

Sanırım x: ~ --x; ++ x
Kyle'ı değiştiremezseniz

1
Kyle, ~operatör sayıyı 32 bitlik bir tamsayıya dönüştürür. Giriş olarak bir şamandıra varsa, hortumlanır.
Alexis Wilke

7

Bunun biraz geç olduğunu biliyorum, ancak bununla mücadele eden insanlar için aşağıdaki işlevleri kullanabilirsiniz:

  • Herhangi bir sayıyı pozitif çevirin

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • Herhangi bir sayıyı negatif çevirin

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • Herhangi bir sayıyı ters çevir

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54

6

Olumsuzdan olumluya

var X = -10 ;
var number = Math.abs(X);     //result 10

Pozitif - negatif

var X = 10 ;
var number = (X)*(-1);       //result -10

Ne göstermek istediğini görüyorum ama bunu nasıl ifade ettiğin kafa karıştırıcı. Belki şunu belirtmelisiniz: pozitif: abs kullanın, negatif: abs (x) * -1. Bu şekilde eski X işaretinin ne olduğunu ima etmezsiniz.
Dionys

5

(-1) ile çarpmak, negatif sayıyı pozitif hale dönüştürmenin en hızlı yoludur. Ama hatamı pozitif bir sayıyı negatife dönüştürmemeye dikkat etmelisin! Bu yüzden ek kontrol gerekli ...

Sonra Math.abs, Math.floor ve parseInt en yavaş olanıdır.

resim açıklamasını buraya girin

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
Bazılarımız bu gibi durumlarda temel matematiğin ne kadar yararlı olabileceğini unutuyoruz. Bana bu kadar basitliği hatırlattığın için teşekkürler.
Alexander Dixon

2

Ben kendim böyle bir şey yaptım.

num<0?num*=-1:'';

Sayının negatif olup olmadığını kontrol eder ve öyleyse -1 ile çarpın Bu bir değer döndürür, yakalarsanız size kalır. Bir şeye atamak istiyorsanız, muhtemelen şöyle bir şey yapmalısınız:

var out = num<0?num*=-1:num; //I think someone already mentioned this variant.

Ama bu gerçekten hedefinizin ne olduğuna bağlı. Benim için basitti, negatifse pozitif yap, başka bir şey yapma. Dolayısıyla koddaki ''. Bu durumda üçüncül operatör kullandım çünkü istedim, çok iyi olabilir:

if(num<0)num*=-1;

Burada bitsel çözümü gördüm ve bu konuda da yorum yapmak istedim.

~--num; //Drawback for this is that num original value will be reduced by 1

Bu ruh bence çok süslü, bunu şöyle yeniden yazabiliriz:

~(num = num-1);

Basit bir ifadeyle, negatif sayıyı alırız, ondan bir tane alırız ve sonra bitsel olarak ters çeviririz. Bitsel olarak tersine çevirmiş olsaydık, normalde 1 değeri çok küçük olurdu. Bunu da yapabilirsiniz:

~num+1; //Wont change the actual num value, merely returns the new value

Bu aynı şeyi yapar ancak önce ters çevirir ve sonra pozitif sayıya 1 ekler. CANT bunu yapmanıza rağmen:

~num++; //Wont display the right value.

Bu önceliğin nedeni işe yaramayacak , num++sonradan değerlendirilecek gibi postfix operatörleri ~ ve ++numbit (NOT) (~) ile aynı öncelikte olmasına rağmen önekin işe yaramamasının nedeni sağdan sola değerlendirilmesidir. Onları takas etmeye çalıştım ama önek bitwise değil karşılaştırıldığında biraz titiz görünüyor. +1 işe yarayacaktır çünkü '+' daha yüksek önceliğe sahiptir ve daha sonra değerlendirilecektir.

Bu çözümü oldukça eğlenceli buldum ve sadece orada atıldığı için genişlemeye karar verdim ve ona bakan insanlar muhtemelen görmezden geliyorlardı. Evet olmasına rağmen, şamandıralarla çalışmaz.

Benim umudum, bu yazının orijinal sorudan uzaklaşmamış olması. : /


2

Minimal yaklaşımım

Negatif sayıyı pozitif veya tersine dönüştürmek için

var num = -24;
num -= num*2;
console.log(num)
// result = 24


0

Sayıyı mantıksal olarak negatife dönüştüren ve negatife 1 ekleyen ~ işlecini kullanabilirsiniz :

var x = 3;
x = (~x + 1);
console.log(x)
// result = -3


0

Bunu yapmanın başka bir yolunu biliyorum. Bu teknik pozitiften negatife çalışır & Vice Versa

var x = -24;
var result = x * -1;

Tersine:

var x = 58;
var result = x * -1;

CANLI KOD:

// 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);


Bu soruya cevap vermiyor. dave, değeri negatiften pozitife ve pozitiften pozitife değiştiren bir işlev ister .
RaphaMex

Sorusu "JavaScript'te sayıları pozitif değere dönüştüren bir matematik işlevi var mı?" Olumludan olumluya bahsetmez. Sadece olumludan olumsuza değiniyor. Neden pozitifi pozitife dönüştürmek istersiniz? Değer aynı olurdu.
Tarryk Ttmm

Sorunun altındaki bir yorumda açıklama isteyebilirsiniz. Her neyse, doğru olan cevap kabul edilir. Tekrar okuyabilir ve pozitif olanı olumluya dönüştüren yerleşik bir fonksiyon olduğunu görebilirsiniz.
RaphaMex


0

Ne yaparsanız yapın, sayının her zaman pozitif olmasını istiyorsanız.

function toPositive(n){
    if(n < 0){
        n = n * -1;
    }
    return n;
}
var a = toPositive(2);  // 2
var b = toPositive(-2); // 2

Bunu da deneyebilirsin, ama ben tavsiye etmiyorum:

function makePositive(n){
    return Number((n*-n).toString().replace('-','')); 
}
var a = makePositive(2);  // 2
var b = makePositive(-2); // 2

Buradaki sorun, sayıyı negatif olarak değiştirip ardından dizeye dönüştürüp - dizeden çıkarıyor, sonra int'e dönüyor olabilirsiniz. Sanırım hangi sadece diğer işlevi kullanarak daha fazla işlem alacaktı.

Ben php bu test ve ilk işlevi daha hızlı, ama bazen JS bazı deli şeyler yapar, bu yüzden kesin olarak söyleyemeyiz.


İkinci örnek, giriş numarasının gücünü verir. n*-nolmalı n*-1. Tip dönüşümleri ve yöntem çağrısı ilk örneğin basitliği ile karşılaştırıldığında çok verimsiz olduğu için yine de örneği tamamen kaldırırdım. JS'nin tuhaflığı bile burada yardımcı olamaz
Gust van de Wal
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.