2009-02-23 29 views

Trả lời

13

Bạn có thể làm những gì bạn mô tả bằng toán tử "%" (modulus). Đoạn mã sau là một ví dụ về việc chia phần còn lại.

$remainder=$num % $divideby; 
$number=explode('.',($num/$divideby)); 
$answer=$number[0]; 
echo $answer.' remainder '.$remainder; 
+1

Không sử dụng một hàm chuỗi trên một loại phao. Sử dụng tốt hơn 'floor()'. – Gumbo

+1

một cách mù quáng khi sử dụng sàn có thể không thành công trên kết quả tiêu cực –

15
$quotient = intval($dividend/$divisor); 
$remainder = $dividend % $divisor; 

Sử dụng intval thay vì floor sẽ làm tròn thương đối với zero, cung cấp kết quả chính xác khi cổ tức là tiêu cực.

+0

có thể mang lại kết quả sai nếu âm, ví dụ: nếu cổ tức = 5 và số chia = 2 bạn sẽ tính 3 là thương số thay vì 2 –

+0

Có, tôi nhận thấy rằng ngay sau khi đăng và sửa đổi trả lời của tôi để sử dụng 'intval' thay vì' tầng'. –

+0

sử dụng '$ remainder = fmod ($ cổ tức, $ ước)' khi sử dụng số nguyên – Sablefoste

5

Một giải pháp cho các số dương và âm tính:

$quotient = $dividend/$divison; 
$integer = (int) ($quotient < 0 ? ceil($quotient) : floor($quotient)); 
$remainder = $dividend % $divisor; 
1

Nếu bạn cần phải nhìn nó lên, các nhà điều hành% được gọi là mod (hoặc mô đun).

0

tôi đã phát triển phương pháp này vì tử số của tôi là một giá trị float và mô đun đã được làm tròn kết quả.

Sử dụng phương pháp tiếp cận của Raffaello được cung cấp here để chia phao và lấy từ giải pháp của Sam152 ở trên đã đưa ra những điều sau đây.

$a = 2.1; 
$b = 8; 
$fraction = $a/(float) $b; 
$parts = explode('.', $fraction);     
$int = $parts[0]; 
$remainder = $score - ($int*$b) ; 
2

Các mathematical correct answer là:

$reminder = $dividend % $divisor; 
$quotient = ($dividend - $reminder)/$divisor; 

và nhắc nhở xác minh điều kiện 0 <= $reminder < abs($divisor).

Thật không may, nhiều ngôn ngữ lập trình (bao gồm PHP) không xử lý các số âm một cách chính xác từ quan điểm toán học. Họ sử dụng different rules để tính toán giá trị và dấu hiệu của lời nhắc.

Nếu bạn cần phải làm việc với những con số tiêu cực và nhận được kết quả chính xác toán học thì bạn có thể sử dụng công thức sau đây:

$reminder = (($dividend % $divider) + abs($divider)) % abs($divider); 
$quotient = ($dividend - $reminder)/$divider; 

Họ dựa trên đường PHP tính mô đun với toán hạng tiêu cực và họ có thể không cung cấp kết quả chính xác nếu chúng được chuyển sang một ngôn ngữ khác.

Dưới đây là script triển khai các công thức này và kiểm tra kết quả dựa trên các giá trị được cung cấp làm ví dụ trong câu trả lời đúng toán học đã nói ở trên.

+0

Không biết tại sao điều này lại bị bỏ phiếu. – demonkoryu

0

Một ví dụ để hiển thị chuỗi như 1 giờ 6 phút sử dụng sàn() và mô đun (%) nếu chỉ vài phút/giây đưa ra:

$minutes=126; 

if($minutes < 60) { 
    $span= $minutes.' min.'; 
} else { 
    $rem=$minutes % 60; 
    $span=floor($minutes/60).' h. '. (($rem>0) ? $rem.' min.':''); 
} 

// echo 'Hello Jon Doe, we notify you that even will last for 2 h. 6 min. 
echo 'Hello Jon Doe, we notify you that event will last for '.$span; 
Các vấn đề liên quan