2012-02-19 64 views
43

Tôi muốn nhận giá trị tuyệt đối của một số trong JavaScript. Đó là, thả dấu. Tôi biết toán học tôi có thể làm điều này bằng cách bình phương số sau đó lấy căn bậc hai, nhưng tôi cũng biết rằng điều này là khủng khiếp không hiệu quả.Nhận giá trị tuyệt đối của một số trong Javascript

x = -25 
x = x * x 
x = sqrt(x) 

// x would now be 25 

Có cách nào trong JavaScript để chỉ cần bỏ dấu của một số hiệu quả hơn phương pháp toán học?

+5

'Math.abs (-25); // 25' – davin

+10

Không có biểu thức chính quy nào được đề xuất? ;-) Hoặc 'jQuery.abs()'? –

+0

@DanWalmsley Tôi không có ý xúc phạm bạn. Ngay cả khi bạn không biết tên (đó không phải là một điểm tốt trên trang Q & A của lập trình viên, tôi đoán điều đó giải thích các downvotes), tìm kiếm 'javascript positive to negative number' hoặc một cái gì đó như thế sẽ giúp ích. – kapa

Trả lời

87

Bạn muốn nhận số absolute value của một số? Chức năng javascript Math.abs được thiết kế chính xác cho mục đích này.

var x = -25; 
x = Math.abs(x); // x would now be 25 

Dưới đây là một số trường hợp kiểm tra từ các tài liệu:

Math.abs('-1');  // 1 
Math.abs(-2);  // 2 
Math.abs(null);  // 0 
Math.abs("string"); // NaN 
Math.abs();   // NaN 
9

Đây là một cách nhanh chóng để có được những giá trị tuyệt đối của một số. Nó có thể áp dụng trên mọi ngôn ngữ:

(x^(x >> 31)) - (x >> 31); 
+12

Điều này có giả định một số 32 bit không? –

+3

Và phần bổ sung của 2? –

+0

JavaScript không sử dụng số 64 bit (đôi)? –

5

Nếu bạn muốn xem cách JavaScript thực hiện tính năng này dưới mui xe, bạn có thể xem bài đăng này.

Blog Post

Đây là việc thực hiện dựa trên mã nguồn crom.

function MathAbs(x) { 
    x = +x; 
    return (x > 0) ? x : 0 - x; 
} 
+0

điều này thật tuyệt, nhưng nó không thực sự trả lời câu hỏi –

+2

@AndreFigueiredo - Tôi nghĩ nó trả lời khá tốt, mặc dù chắc chắn một chút ngắn gọn. Nó gợi ý bạn có thể sử dụng 'absx = Math.abs (x);' hoặc bạn có thể tạo một hàm ('MathAbs') hoặc thậm chí trực tiếp sử dụng' absx = (x> 0)? x: 0 - x; '. Có lẽ thêm một tuyên bố tương tự cho câu trả lời sẽ giúp đỡ. –

0

Chỉ để ghi lại, một phương pháp đơn giản khác có thể là;

var abs = x => Math.sqrt(x*x) 
Các vấn đề liên quan