2011-12-13 30 views
7

Tôi có một biến số từ 0 đến 100. Nó có thể giống như 83.333334.Nhận số chia hết cho năm bằng Math.Round

Tôi muốn sử dụng Math.Round để làm tròn số (ví dụ: Math.round(83.333334);). Làm thế nào tôi có thể làm điều này để kết quả luôn chia hết cho năm (tức là trong tập hợp [0, 5, 10, 15 ... 85, 90, 95, 100])?

Trả lời

24

Divide 5, vòng đó, nhân với 5.

alert(Math.round(83/5) * 5); 

jsFiddle Demo

+2

+1 Đã thêm một bản trình diễn jsFiddle thú vị. – kapa

+0

@bazmegakapa cool. –

+2

@ Xeon06 là có một số tên toán học cho logic này? – Reddy

2

Sử dụng modulus operator để "làm tròn" xuống số của bạn thành bội số của 5, xem ví dụ bên dưới.

var x = Math.round(83.333334); 

x = x - (x % 5); 

Nếu bạn muốn "vòng về phía zero" (và có một giá trị chính xác cho số âm là tốt) sử dụng một cái gì đó như thế này:

x = Math[x < 0 ? 'ceil' : 'floor'] (x/5) * 5; 
+3

Sẽ "tròn" 89 đến 85. – kapa

+0

@bazmegakapa Đúng vậy, và thành thật mà nói, tôi cho rằng đây là điều OP yêu cầu, đó là lý do tôi viết "tròn". Nhưng có lẽ (s) ông có nghĩa là vòng đến gần nhất trong số năm. –

1

này cung cấp cho một thử .

Math.round(val/5) * 5; 
+1

Tôi không thể tìm thấy bất kỳ trường hợp nào khi thêm 2.5 sẽ tạo ra bất kỳ sự khác biệt nào về kết quả. Ví dụ? * Chỉnh sửa: * Trong thực tế, điều này gây ra kết quả không chính xác. Nếu tôi nhập '80', tôi sẽ làm cho nó '82.5' mà sau đó sẽ dẫn đến' 85' quảng cáo bội số gần nhất của 5, khi nó vẫn là '80'. – animuson

+0

@animuson Xin lỗi, trong đầu tôi, tôi đang nghĩ 'tầng', không phải' tròn '. Đã sửa! – cheeken

2
function roundDownToMultiple(number, multiple) { 
    return number - (number % multiple); 
} 

roundDownToMultiple(86, 5); // 85 

roundDownToMultiple(89, 5); // 85 

roundDownToMultiple(96, 5); // 95 
+0

Quên tất cả về modulos, cảm ơn! –

1

Sử dụng này Math.round(Math.floor(Math.random() * 100)/5) * 5 Bạn có thể nhận được số chia hết cho 5.

  • 100 - là phạm vi của Kết quả.
Các vấn đề liên quan