2011-12-20 38 views
5

Tôi đã thấy nhiều nơi sử dụng Math.floor()Math.random()Giải thích Math.floor (Math.random())

như dưới đây

$('a.random-color').hover(function() { //mouseover 
    var col = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ')'; 
    $(this).animate({ 
     'color': col, 
     'paddingLeft': '20px' 
    },1000); 
    },function() { //mouseout 
    $(this).animate({ 
     'color': original, 
     'paddingLeft': '0' 
    },500); 
    }); 
}); 

Tại sao sử dụng Math.floor()Math.random()?

Trả lời

10

Math.random sẽ cung cấp cho bạn một số dấu chấm động giữa 0 (bao gồm) và 1 (độc quyền).

Nhân với 256 sẽ cung cấp cho bạn một số trong phạm vi 0 (bao gồm) thông qua 256 (độc quyền), nhưng vẫn nổi điểm.

Lấy sàn của số đó sẽ cung cấp cho bạn số nguyên từ 0 đến 255 (cả hai bao gồm).

Đó là số nguyên từ 0 đến 255 mà bạn cần để tạo các giá trị RGB như rgb(72,25,183).

1

Math.floor sẽ cung cấp cho một số nguyên và loại bỏ các số thập phân.

Math.random trả về số từ 0 đến 1 và do đó sẽ tạo ra số thập phân khi nhân với 256. Đó là lý do bạn muốn sử dụng tầng để loại bỏ số thập phân nếu không giá trị rgb sẽ không hoạt động.

1

Math.floor() là để giảm phần thập phân của Number. Nó là đối diện của Math.ceil().

Bạn cũng có thể nhân đôi toán tử nghịch đảo bitwise (~~) để đạt được giống như Math.floor() (mặc dù tất nhiên phương thức floor() dễ đọc hơn nhiều đối với hầu hết).

~~(Math.random() * 256) 
2

Có vẻ như một màu sắc ngẫu nhiên là mong muốn - một với mỗi thành phần ngẫu nhiên giữa 0 và 255.

Math.random() trả về một số ngẫu nhiên trên [0,1) (tức là nó có thể được chính xác bằng không hoặc lên đến nhưng không bao gồm một).

Nhân giá trị ngẫu nhiên đó với 256 cho một số ngẫu nhiên trên phạm vi [0,256) (tức là nó có thể là 255,99, nhưng không bao giờ là 256). Hầu như ở đó, nhưng không hoàn toàn.

Math.floor() làm tròn số xuống số nguyên gần nhất, làm cho kết quả là số nguyên trên [0,255] như mong muốn.

1

Math.random trả về giá trị từ 0 đến 1. Bạn nhân nó với 256 để nó trả về một số giá trị float giữa 0 và 256. math.floor sẽ bỏ qua giá trị phân số từ nó.

0

~~Number chỉ là số Math.floor() cho số dương. Đối với số âm, đó là số Math.ceil().

Đối với số dương, bạn có thể sử dụng:

Math.floor(x) == ~~(x) 

Math.round(x) == ~~(x + 0.5) 

Math.ceil(x) == ~~(x + 1) 

Đối với số âm, bạn có thể sử dụng:

Math.ceil(x) == ~~(x) 

Math.round(x) == ~~(x - 0.5) 

Math.floor(x) == ~~(x - 1)