Số từ Dương sang Số âm trong JavaScript?


101

Về cơ bản, mặt trái của abs. Nếu tôi có:

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

Không có vấn đề gì bảng điều khiển luôn trả về một số dương. Làm cách nào để sửa lỗi này?

Nếu tôi làm:

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

nó hoạt động tho, nhưng nó không "KHÔ" và chỉ ngu ngốc khi có toàn bộ khối mã CHỈ cho a -.


4
Tôi chắc chắn rằng có một plugin jQuery cho điều đó.
Jakub Hampl

Câu trả lời:


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

Tuy nhiên, bạn nhận ra rằng đối với mã của bạn

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

Nếu chỉ số tìm được là 3 và slideNum là 3
thì 3 <3-1 => false
nên slideNum vẫn dương ??

Nó giống như một lỗi logic đối với tôi.



29

Công thức cơ bản để đảo ngược từ dương sang âm hoặc từ âm sang dương:

i - (i * 2)

32
Có chuyện gì vậy i * -1? Ngoài ra, tôi không chắc điều này trả lời câu hỏi thực tế.
Andrew Barber

5
Đó là kiến trúc phụ thuộc, nhưng 0 - i có thể là nhanh hơn
Bến Taliadoros

@AndrewBarber i * -1dường như không hoạt động trong phiên bản chrome hiện tại. Sử dụng -Math.abs (1) mặc dù không chắc tại sao điều này hoạt động, hy vọng ai đó có thể mở rộng lý do tại sao.
Philip Rollins

@PhilipRollins i * -1sẽ luôn hoạt động. Tôi không biết bạn đã thử như thế nào, có thể bạn đã mắc một số lỗi đánh máy. Nhưng ... có gì sai khi i = -ithay vì i = i * -1(hoặc i *= -1) để đảo ngược từ dương sang âm hoặc từ âm thành dương?
Diego ZoracKy

@DiegoZoracKy Tôi cũng nghĩ vậy, nhưng không phải đối với phiên bản chrome tôi đang chạy và nó hoạt động trong firefox nên không có lỗi chính tả. Tôi đang sử dụng Linux ngay bây giờ, nhưng bạn có thể tự do kiểm tra lý thuyết của mình trên chrome. Hãy nhớ rằng chrome tự động cập nhật để mọi bản sửa lỗi đều đã được áp dụng và mọi lỗi mới sẽ được đưa ra cộng đồng, có nghĩa là đây có thể là một lỗi chỉ tồn tại trong vài ngày và bây giờ sẽ được sửa mãi mãi.
Philip Rollins

9

Để có phiên bản phủ định của một số trong JavaScript, bạn luôn có thể sử dụng ~toán tử bitwise.

Ví dụ: nếu bạn có a = 1000và bạn cần chuyển nó thành phủ định, bạn có thể làm như sau:

a = ~a + 1;

Kết quả sẽ a-1000.


Điều này có nhanh hơn nhân với âm 1 không?
ryandawkins

Tôi không chắc thành thật mà nói, bạn phải xem xét điều gì đó.
Benjamin Williams

@RyanDawkins điều này sẽ không nhanh hơn nhân với -1. Javascript không có toán tử boolean như cách C. Vì vậy, để thực hiện một thao tác boolean, JS phải chuyển đổi giữa các kiểu bên dưới.
spinlock

2
Tại sao không a = -a?
Diego ZoracKy

Bitwise không phủ định một số chính xác. ~1000-1001, không phải -1000.
brentonstrine

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

1
Vui lòng thêm Somes giải thích chỉnh sửa câu trả lời của bạn, mã tránh chỉ trả lời
GGO

1
@GGO ... Tôi không chắc điều này chưa rõ ràng như thế nào, nhưng chắc chắn: Bằng cách thêm dấu trừ vào trước giá trị, sau đó đặt giá trị đó trong dấu ngoặc đơn, giá trị được đánh giá ... kết quả là Phủ định của giá trị.
tpayne84

6

Bạn có chắc chắn rằng quyền kiểm soát đang đi vào cơ thể của if? Như trong điều kiện trong ifbao giờ đúng? Bởi vì nếu không, phần thân của di ifchúc sẽ không bao giờ được thực hiện và slideNumsẽ vẫn còn dương. Tôi sẽ đánh liều đoán rằng đây có thể là những gì bạn đang thấy.

Nếu tôi thử cách sau trong Firebug, nó có vẻ hoạt động:

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

slideNum *= -1cũng nên hoạt động. Đúng như vậy Math.abs(slideNum) * -1.


Tôi vừa làm if($this.find('.pdxslide-activeSlide').index() < slideNum-1){ slideNum *= -1 }và tôi vẫn trở lại tích cực trong console.log đó?
Oscar Godson

@Oscar, những gì Vivin đang nói $this.find('.pdxslide-activeSlide').index() < slideNum-1luôn là sai.
David Tang

4

Nếu bạn không thích sử dụng Math.Abs ​​* -1, bạn có thể sử dụng câu lệnh if đơn giản này: P

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

Tất nhiên bạn có thể biến nó thành một chức năng như thế này

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

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

Hi vọng điêu nay co ich! Math.abs có thể sẽ phù hợp với bạn nhưng nếu nó không hiệu quả


Trước khi trả lời một câu hỏi, bạn cũng nên xem xét thời điểm nó được hỏi. Câu hỏi này đã gần 5 năm. Vì vậy, trừ khi công nghệ đã thay đổi và bây giờ có một câu trả lời tốt hơn / phù hợp hơn thì thường không có nhiều giá trị gia tăng bằng cách đưa ra một câu trả lời khác.
Igor

1
Cá nhân tôi xem qua các câu hỏi tràn ngăn xếp cũ mọi lúc. Chắc chắn điều này sẽ không quá hữu ích đối với một người chuyên nghiệp nhưng có lẽ một người mới bắt đầu có thể đánh giá cao mẹo này! Điều đó nói rằng cách dễ nhất thực sự là như trên -Math.Abs ​​(-3) Như đã thảo luận ở trên Math.Abs ​​biến bất kỳ giá trị nào là dương. Sau đó, tiền tố tiêu cực làm cho nó tiêu cực
Ash Pettit

Đã ủng hộ. Cá nhân tôi đánh giá cao câu trả lời này và thấy nó có giá trị. Bạn có thể học hỏi từ bất kỳ ai.
jeremysawesome

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

Kết quả: -10

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

Kết quả: 10

Nếu bạn chia cho số âm 1, nó sẽ luôn lật số của bạn theo một trong hai cách.



2

Javascript có một toán tử dành riêng cho việc này: phủ định một ngôi .

TL; DR: Đó là dấu trừ!

Để phủ định một số, chỉ cần thêm tiền tố -vào đó theo cách trực quan nhất có thể. Không cần phải viết một hàm, sử dụng Math.abs()nhân với -1hoặc sử dụng toán tử bitwise.

Phủ định riêng hoạt động trên các ký tự số:

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

Nó cũng hoạt động với các biến:

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

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

Bạn thậm chí có thể sử dụng nó nhiều lần nếu bạn sử dụng toán tử nhóm (hay còn gọi là dấu ngoặc đơn:

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)

Tất cả những điều trên cũng hoạt động với một biến.


1

Sử dụng 0 - x

x là số bạn muốn đảo ngược


3
vừa -xđủ.
Antti Haapala

1
Just -x cho kết quả là -0. Giải pháp này sẽ tốt hơn nếu có thể có số không-
chrismarx

1

Nó sẽ chuyển đổi mảng âm thành dương hoặc ngược lại

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

0

Trong javascript vani

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

Trong đó số ở trên là số dương mà bạn định chuyển đổi

Mã này sẽ chỉ chuyển đổi số dương thành số âm đơn giản bằng cách nhân với -1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.