2012-10-16 33 views
6

Tìm kiếm một hàm ro số tròn đến bội số gần nhất của 5nguyên Round đến bội số gần nhất của 5 trong PHP

22 -> 20 
23 -> 25 
40 -> 40 
46 -> 45 
48 -> 50 

và vân vân.

Cố gắng này mà luôn luôn trả về giá trị cao hơn:

5 * ceil($n/5); 
+0

Hãy thử toán tử mô đun: '$ n - ($ n% 5);' nó thường là tốt nhất cho những trường hợp này. – Mahn

Trả lời

20

Sử dụng round() thay vì ceil().

5 * round($n/5); 

ceil() làm tròn một số dấu phẩy động lên đến số nguyên tiếp theo trong chuỗi. round() sẽ làm tròn đến số nguyên gần nhất bằng cách sử dụng các quy tắc làm tròn tiêu chuẩn.

+0

thx người đàn ông, đó là dễ dàng :) – Chris

+1

'' 'round()' '' trả về một số phao không phải là một số nguyên. '' '(int) 5 * round ($ n/5);' '' có thể tốt hơn. – trante

+0

@trante Nó sẽ làm tròn thành một số nguyên, tuy nhiên, nó vẫn sẽ là kiểu 'float'. – alex

0

Quay lại toán học, vì vòng làm việc với số thập phân, nhân với 5 và chia cho 10 và sau đó làm tròn, nó. Nhân với 5 lần nữa để có được những gì bạn muốn. (Other câu trả lời làm việc là tốt, chỉ là một cách khác nhau để nhìn vào nó)

function round_5($in) 
{ 
    return round(($in*2)/10)*5; 
} 

echo round_5(48); 

Xem nếu điều này giúp

0

Vâng, phải đối mặt với vấn đề này trong khi giúp thực hiện một POS cho một công ty Canada, đến với điều này giải pháp, hy vọng nó sẽ giúp ai đó. (Canada đã loại bỏ đồng xu trong năm 2012). Cũng bao gồm cho việc bao gồm thuế giá, chỉ cần vượt qua '1' là argh thứ hai.

//calculate price and tax 
function calctax($amt,$tax_included = NULL){ 
    $taxa = 'tax rate 1 here'; 
    $taxb = 'tax rate 2 here'; 
    $taxc = ($taxa + $taxb) + 1; 
    if(is_null($tax_included)){ 
    $p = $amt; 
    }else{ 
    $p = number_format(round($amt/$taxc,2),2); 
    } 
    $ta = round($p * $taxa,2); 
    $tb = round($p * $taxb,2); 
    $sp = number_format(round($p+($ta + $tb),2),2); 
    $tp = number_format(round(($sp*2)/10,2)*5,2); 
    $ret = array($ta,$tb,$tp); 
    return $ret; 
} 
Các vấn đề liên quan