Jawaban:
var x = -100; ~x+1 === 100
tetapi var x = 100; ~x+1 === -100
. Math.abs
selalu membuatnya menjadi positif sementara mengambil pelengkap yang hanya membalik tanda.
Bagaimana dengan x *= -1
? Saya suka kesederhanaannya.
x
akan dibalik. Jika x = 23
dan didorong ke dalam persamaan itu, x
maka 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 ?!"
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.
x
selalu positif. Maafkan saya @ myusuf.
Tanda minus (-) dapat mengubah angka positif menjadi angka negatif dan angka negatif menjadi angka positif. x=-y
adalah gula visual untuk x=(y*-1)
.
var y = -100;
var x =- y;
Jika Anda ingin menulis kode menarik yang tidak dapat diperbarui orang lain, coba ini:
~ --x
~
operator mengubah angka menjadi integer 32 bit. Jika Anda memiliki float sebagai input, itu akan disemprot.
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
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
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.
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
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. : /
Pendekatan minimal saya
Untuk mengonversi angka negatif ke positif & sebaliknya
var num = -24;
num -= num*2;
console.log(num)
// result = 24
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
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);
Untuk pemrograman fungsional Ramda memiliki metode yang bagus untuk ini. Metode yang sama berfungsi dari positif ke negatif dan sebaliknya.
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.
n*-n
seharusnya 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