2012-07-27 76 views
11

Tôi có đoạn code sau laøm troøn lượng của tôi vào Dollar gần nhất:làm tròn đến gần 50 cent

switch ($amazonResult['SalesRank']) { 
    case ($amazonResult['SalesRank'] < 1 || trim($amazonResult['SalesRank'])===''|| !isset($amazonResult['SalesRank']) || $amazonResult['SalesRank']=== null): 
     $Price=((float) $lowestAmazonPrice) * 0.05; 
     $payPrice = round($Price, 0); //to round the price up or down to the nearest $ 
     break; 
    case ($amazonResult['SalesRank'] > 0 && $amazonResult['SalesRank'] <= 15000): 
     $Price=((float) $lowestAmazonPrice) * 0.20; 
     $payPrice = round($Price, 0); //to round the price up or down to the nearest $ 
     break; 

Tôi hiểu rằng nếu tôi sử dụng vòng ($ Giá, 2); rằng tôi sẽ có 2 chữ số thập phân, nhưng có cách nào để làm tròn tới 50 xu gần nhất không?

Trả lời

12

Multiply bằng 2, vòng 0 trong chữ số ở trên, bạn muốn làm tròn đến 0,5 (vòng đến những nơi thập phân trong trường hợp của bạn), chia cho 2.

đó sẽ cho bạn làm tròn đến gần nhất .5, thêm vào số 0 và bạn đã làm tròn đến .50 gần nhất.

Nếu bạn muốn gần nhất .25 làm tương tự nhưng nhân và chia cho 4.

+0

Cảm ơn, mà đã làm các trick. – Jim

24

Một số toán học đơn giản nên thực hiện thủ thuật. Thay vì làm tròn đến 50 xu gần nhất, hãy làm tròn đôi số tiền $price thành đồng đô la gần nhất, sau đó bằng một nửa.

$payprice = round($Price * 2, 0)/2; 
0

Manual

Từ hướng dẫn: echo round(1.95583, 2); // 1.96

float round (float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]) 

val 
The value to round 

precision 
The optional number of decimal digits to round to. 

mode 
One of PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD. 

Chỉ cần thay đổi để: echo round(1.54*2, 0)/2; // 1.5

4
function roundnum($num, $nearest){ 
    return round($num/$nearest) * $nearest; 
} 

ví dụ:

$num = 50.55; 
$nearest = .50; 
echo roundnum($num, $nearest); 

lợi nhuận

50.50 

Điều này có thể được sử dụng để làm tròn đến bất cứ điều gì, 5cents, 25cents, vv ...

tín dụng để ninjured: http://forums.devshed.com/php-development-5/round-to-the-nearest-5-cents-537959.html

+0

Cảm ơn! Bạn có thời gian hoàn hảo, tôi chỉ nói rằng tôi đã phải thay đổi làm tròn đến 25 xu gần nhất. Điều này hoạt động hoàn hảo. – Jim

0

số chia gần nhất, làm ceil, sau đó nhân với gần nhất để giảm các chữ số có nghĩa.

function rndnum($num, $nearest){ 
    return ceil($num/$nearest) * $nearest; 
} 

Ví dụ:

vang rndnum (95.5,10) trả 100

vang rndnum (94.5,1) trả 95

1

Chú ý rằng nếu bạn sử dụng sàn thay vì hình tròn, bạn cần một vòng thêm vì sự chính xác nội số phao.

function roundnum($num, $nearest){ 
    return floor(round($num/$nearest)) * $nearest; 
} 

$num = 16.65; 
$nearest = .05; 
echo roundnum($num, $nearest); 

Nếu không nó sẽ trở lại 16,60 thay vì 16,65

+0

Đối với tôi, điều đó gây ra 16,64 để trả lại 16,65. Sử dụng 'sàn ($ num/$ gần nhất) * $ gần nhất' cũng không hoạt động, như bạn đã nói, khiến 16,65 trở lại 16,60. Bí quyết trong trường hợp này là làm điều này: 'sàn ($ num * (1/$ gần nhất)) * $ gần nhất. Tôi không chắc chắn lý do tại sao điều này hoạt động. – David

+0

@ David bạn thực sự đúng. Cảm ơn các giải pháp.Tôi không thấy _why_ nó hoạt động, nhưng nó hoạt động! –

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