Ubah angka negatif menjadi positif di JavaScript


308

Apakah ada fungsi matematika dalam JavaScript yang mengubah angka menjadi nilai positif?

Jawaban:


704

Anda bisa menggunakan ini ...

Math.abs(x)

Math​.abs()| MDN


1
Anda mungkin ingin mempertimbangkan ~ x +1. Ini cukup cepat, tetapi tidak jelas apa yang dilakukannya. Kocok ini untuk menunjukkan perbedaan: jsperf.com/absolute-int
omgaz

22
@ Tomgaz Mereka tidak sama ... var x = -100; ~x+1 === 100tetapi var x = 100; ~x+1 === -100. Math.absselalu membuatnya menjadi positif sementara mengambil pelengkap yang hanya membalik tanda.
jduncanator

Anda mungkin ingin mempertimbangkan -x. Cukup cepat!
amara

93

Bagaimana dengan x *= -1? Saya suka kesederhanaannya.


17
Meskipun ini sederhana, itu membuat asumsi bahwa angka akan selalu negatif. Jika use case seperti itu, maka itu mengagumkan. Kalau tidak, saya akan menyarankan hati-hati.
myusuf

4
Saya tidak setuju @ myusuf. Nomor apa pun yang xakan dibalik. Jika x = 23dan didorong ke dalam persamaan itu, xmaka akan sama -23. Dalam kata-kata Pak Escalante, "Waktu positif, negatif sama dengan negatif. Waktu negatif, negatif sama dengan positif." ... "Bagaimana saya mencapai kiiiiiiids ini ?!"
ExcellentSP

2
Tepatnya @Shane kemarin. Jika x=23, maka itu akan menjadi -23. Seperti pertanyaan, 'Konversi angka negatif ke angka positif di JS', tetapi di atas akan membalik angka apa pun, baik itu positif atau negatif.
myusuf

2
Dimengerti Interpretasi saya atas komentar Anda adalah dalam konteks membalik nomor dan tidak xselalu positif. Maafkan saya @ myusuf.
ExcellentSP

1
hanya mengingatkan bahwa solusi ini tidak berlaku untuk angka Float, ia hanya mendapatkan bagian desimal
Oscar Luza

46

Math.abs(x)atau jika Anda yakin nilai negatif sebelum konversi hanya tambahkan tanda minus biasa: x = -x.


29

Tanda minus (-) dapat mengubah angka positif menjadi angka negatif dan angka negatif menjadi angka positif. x=-yadalah gula visual untuk 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 ... 

Saya menemukan solusi ini mudah dimengerti.


8

Jika Anda ingin menulis kode menarik yang tidak dapat diperbarui orang lain, coba ini:

~ --x


1
Ini tidak akan bekerja dengan floating point ... dan nilai x juga berubah.
Alexis Wilke

Saya kira jika Anda tidak dapat mengubah x: ~ --x; ++ x
Kyle

1
Kyle, ~operator mengubah angka menjadi integer 32 bit. Jika Anda memiliki float sebagai input, itu akan disemprot.
Alexis Wilke

7

Saya tahu ini agak terlambat, tetapi untuk orang-orang yang berjuang dengan ini, Anda dapat menggunakan fungsi berikut:

  • Ubah angka positif

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • Ubah angka negatif

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • Balikkan nomor berapa pun

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

6

Negatif ke positif

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

Positif ke negatif

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

Saya melihat apa yang ingin Anda perlihatkan tetapi cara Anda mengatakannya membingungkan. Mungkin Anda harus menyatakan: ke positif: gunakan abs, ke negatif: abs (x) * -1. Dengan cara ini Anda tidak menyiratkan apa tanda X sebelumnya.
Dionys

5

Mengalikan dengan (-1) adalah cara tercepat untuk mengkonversi angka negatif ke positif. Tetapi Anda harus berhati-hati untuk tidak mengubah kesalahan saya menjadi positif menjadi negatif! Jadi diperlukan pemeriksaan tambahan ...

Kemudian Math.abs, Math.floor dan parseInt adalah yang paling lambat.

masukkan deskripsi gambar di sini

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


1
Beberapa dari kita lupa betapa berharganya matematika dasar dalam kasus seperti itu. Terima kasih telah mengingatkan saya tentang kesederhanaan seperti itu.
Alexander Dixon

2

Saya melakukan sesuatu seperti ini sendiri.

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

Ia memeriksa apakah angka itu negatif dan jika itu, kalikan dengan -1. Ini mengembalikan nilai, terserah Anda jika Anda menangkapnya. Jika Anda ingin menetapkannya untuk sesuatu, Anda mungkin harus melakukan sesuatu seperti:

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

Tapi itu sangat tergantung apa tujuan Anda. Bagi saya itu sederhana, buatlah positif jika negatif, kalau tidak lakukan apa-apa. Karenanya '' dalam kode. Dalam hal ini saya menggunakan operator tersier karena saya ingin, bisa jadi:

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

Saya melihat solusi bitwise di sini dan ingin mengomentari yang satu itu juga.

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

Soultion ini sangat mewah menurut saya, kita bisa menulis ulang seperti ini:

~(num = num-1);

Secara sederhana, kami mengambil angka negatif, mengambil satu dari itu dan kemudian membalikkannya. Jika kita membalikkan bitwise secara normal, kita akan mendapatkan nilai 1 terlalu kecil. Anda juga dapat melakukan ini:

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

Itu akan melakukan hal yang sama tetapi akan membalikkan terlebih dahulu dan kemudian menambahkan 1 ke angka positif. Meskipun Anda TIDAK BISA melakukan ini:

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

Itu tidak akan berfungsi karena diutamakan , operator postfix seperti num++akan dievaluasi sebelum ~ dan alasan awalan++num tidak akan bekerja meskipun berada pada prioritas yang sama dengan bitwise NOT (~), karena itu dievaluasi dari kanan ke kiri. Saya memang mencoba untuk bertukar sekitar tetapi tampaknya awalan sedikit rewel dibandingkan dengan bitwise TIDAK. +1 akan berfungsi karena '+' memiliki prioritas lebih tinggi dan akan dievaluasi nanti.

Saya menemukan solusi itu agak menyenangkan dan memutuskan untuk mengembangkannya karena baru saja dilemparkan ke sana dan memposting orang yang melihatnya mungkin mengabaikannya. Meskipun ya, itu tidak akan bekerja dengan pelampung.

Harapan saya adalah postingan ini tidak meninggalkan pertanyaan awal. : /


2

Pendekatan minimal saya

Untuk mengonversi angka negatif ke positif & sebaliknya

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


0

Anda dapat menggunakan ~ operator yang secara logis mengubah angka menjadi negatif dan menambahkan 1 ke negatif:

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


0

Saya tahu cara lain untuk melakukannya. Teknik ini bekerja negatif ke positif & sebaliknya

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

Dan sebaliknya:

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

KODE LANGSUNG:

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


Itu tidak menjawab pertanyaan. dave meminta fungsi yang mengubah nilai negatif ke positif dan positif ke positif .
RaphaMex

Pertanyaannya mengatakan, "Apakah ada fungsi matematika dalam JavaScript yang mengubah angka menjadi nilai positif?" Dia tidak menyebutkan positif ke positif. Ia hanya menyebutkan negatif ke positif. Mengapa Anda ingin mengonversi positif ke positif. Nilainya akan sama.
Tarryk Ttmm

Anda dapat meminta klarifikasi dalam komentar di bawah pertanyaan. Bagaimanapun, ada jawaban yang diterima yang merupakan jawaban yang benar. Anda dapat membacanya lagi dan melihat bahwa ada fungsi bawaan yang ... mengkonversi positif ke positif.
RaphaMex


0

Jika Anda ingin nomornya selalu positif, apa pun yang Anda bisa lakukan ini.

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

Anda juga dapat mencoba ini, tetapi saya tidak merekomendasikannya:

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

Masalahnya adalah Anda bisa mengubah angka menjadi negatif, lalu mengonversinya menjadi string dan menghapus - dari string, lalu mengonversi kembali ke int. Yang saya kira akan membutuhkan lebih banyak pemrosesan kemudian hanya menggunakan fungsi lainnya.

Saya telah menguji ini di php dan fungsi pertama lebih cepat, tetapi kadang-kadang JS melakukan beberapa hal gila, jadi saya tidak bisa mengatakannya dengan pasti.


Contoh kedua menampilkan kekuatan nomor input. n*-nseharusnya n*-1. Saya akan menghapus contohnya sama sekali, karena konversi jenis dan pemanggilan metode sangat tidak efisien dibandingkan dengan kesederhanaan contoh pertama. Bahkan quirkiness JS tidak mungkin membantu di sini
Gust van de Wal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.