2012-05-10 41 views
16

iam tìm cách để Làm tròn lên và xuống đến gần 5 và sau đó tìm mẫu số chung chung của hai số. Tôi cần nó cho chú thích của y-skale trên biểu đồ.Javascript: Làm tròn lên và xuống 5 gần nhất, sau đó tìm một mẫu số chung

Đây là mã của tôi cho đến nay:

function toN5(x) { 
    var i = 1; 
    while(x >= 100) { 
     x/=10; 
     i*=10; 
    } 
    var remainder = x % 5; 
    var distance_to_5 = (5 - remainder) % 5; 
    return (x + distance_to_5) * i; 
} 

Mục tiêu là một cái gì đó như thế này: Giá trị tối đa (tròn lên đến gần 5)

1379.8 -> 1500 

Và theo chiều ngược lại - giá trị tối thiểu (vòng xuống 5 gần nhất)

41.8 -> 0 

Sau đó, tôi muốn tìm một phổ biến đề cử như 250 hoặc 500

0 -> 250 -> 500 -> 750 -> 1000 -> 1250 -> 1500

hay:

0 -> 500 -> 1000 -> 1500 

là ther một cách để làm một cái gì đó như thế? Thanks a lot

+1

1379.8 được làm tròn đến số 5 gần nhất là 1380. Ý của bạn là "tới 500 gần nhất"? – devnull69

+2

Chính xác bạn muốn nói gì với vòng 5 gần nhất? Trong ví dụ đầu tiên và thứ hai của bạn, bạn đang thực sự làm tròn đến 500 gần nhất. Hoặc đến 250 gần nhất, tùy thuộc vào cách bạn nhìn vào nó. – Blazemonger

Trả lời

46

Nếu bạn muốn làm tròn x đến gần 500, bạn có thể chia nó bằng 500, vòng nó vào số nguyên gần nhất, sau đó nhân với 500 một lần nữa:

x_rounded = 500 * Math.round(x/500); 

Để làm tròn nó vào khu vực gần y, thay thế 500 với y:

x_rounded = 250 * Math.round(x/250); 
+0

Âm thanh tuyệt vời, nhưng vấn đề ist, rằng các giá trị có thể là rất lớn und rất nhỏ. Ví dụ 1500 và 0,23. – Fargho

+2

Sau đó, bạn cần phải cụ thể hơn cho chúng tôi về cách bạn muốn làm tròn số. Hiện tại, câu hỏi của bạn không thực sự nói ý nghĩa của bạn. – Blazemonger

+0

Câu trả lời rất hay. Nếu tôi muốn khoảng 0,05 hoặc 0,1 gần nhất, tôi chỉ cần làm 0,05 * Math.round (x/0,05) –

4

Hy vọng toán học của tôi là đúng nhưng đây là một cách khác nhau của "làm tròn"

function sigfig(n, sf) { 
    sf = sf - Math.floor(Math.log(n)/Math.LN10) - 1; 
    sf = Math.pow(10, sf); 
    n = Math.round(n * sf); 
    n = n/sf; 
    return n; 
} 

function precision(n, dp) { 
    dp = Math.pow(10, dp); 
    n = n * dp; 
    n = Math.round(n); 
    n = n/dp; 
    return n; 
} 

function nearest(n, v) { 
    n = n/v; 
    n = Math.round(n) * v; 
    return n; 
} 

demo

1

Sử dụng this api, bạn có thể khỏa lấp bất kỳ số đến bội số gần nhất của bất kỳ số, lên hoặc xuống, với lệnh này:

$scm.round(number to be rounded).toNearest(multiple to which you want to round);

Ví dụ, nếu bạn muốn đổi 536 thành 500 gần nhất, bạn sẽ sử dụng:

$scm.round(536).toNearest(500);

+0

Rất tiếc, tôi vừa nhận ra câu hỏi đã được hỏi 5 năm trước. Quản trị viên có thể đóng nó không? Có vẻ như không có hoạt động nào ... –

Các vấn đề liên quan