PHP chia và lấy phần còn lại

PHP có tổng cộng tám toán tử số học. Phổ biến nhất là phép cộng (

2
32), phép trừ (
2
33), phép nhân (
2
34) và phép chia (
2
35). Một toán tử ít được biết đến hơn một chút nhưng vẫn rất quan trọng là modulo (
2
36). Trong hướng dẫn này, chúng ta sẽ tập trung vào toán tử modulo. Chúng tôi sẽ thảo luận về những gì nó làm và một số ứng dụng thực tế của nó

Toán tử Modulo làm gì?

Nếu bạn có hai biến số 

2
37 và 
2
38, phép tính 
2
39—thường được phát âm là "a modulo b" hoặc "a mod b"—sẽ cho bạn phần dư sau khi chia 
2
37 cho 
2
38. Modulo là một toán tử số nguyên, vì vậy nó chuyển đổi cả hai toán hạng thành số nguyên trước khi tính toán phần còn lại. Vì vậy, về cơ bản, modulo thực hiện phép chia số nguyên và sau đó trả lại phần còn lại từ cổ tức

Dấu của giá trị được trả về bởi phép toán modulo được xác định bằng dấu của số bị chia. Trong phép chia, kết quả sau khi chia hai số âm sẽ là một số dương. Tuy nhiên, đó không phải là trường hợp của toán tử modulo. Dấu của số chia không ảnh hưởng đến giá trị cuối cùng

Dưới đây là một vài ví dụ

1

2
    echo 1089 % 37;
3
    // Output: 16

4
    echo 1089 % -37;
5
    // Output: 16


0

1

2

3

4

5

6

3

8

9
2
0
2
1
2
2
2
3
2
4
2
1
2
6
2
7
2
8
2
1
    echo 1089 % 37;
0
    echo 1089 % 37;
1

Mô-đun dấu phẩy động

Nếu muốn tính phần dư khi chia hai số dấu phẩy động cho nhau, bạn sẽ phải sử dụng hàm 

2
42. Nó trả về phần còn lại của dấu phẩy động sau phép chia. Giá trị còn lại sẽ có cùng dấu với số bị chia và độ lớn của nó sẽ nhỏ hơn số chia. Ba số có liên quan như sau

1
    echo 1089 % 37;
3

Ở đây, giá trị 

2
43 sẽ luôn là một số nguyên

Bạn nên nhớ rằng số học dấu phẩy động không phải lúc nào cũng chính xác do những hạn chế của biểu diễn nhị phân hoặc thập phân của phân số. Ví dụ: 1/3 không thể được biểu diễn chính xác ở dạng thập phân. Bạn có thể tiếp tục viết 0. 33333. nhưng đến một lúc nào đó bạn sẽ phải dừng lại. Bạn sẽ tiến gần hơn đến giá trị ban đầu với mỗi 3 bổ sung trong biểu diễn thập phân, nhưng giá trị sẽ vẫn không chính xác bằng 1/3

Loại không chính xác này gây ra sự cố với hàm 

2
44. kết quả không hoàn toàn đáng tin cậy

Dưới đây là một số ví dụ về hàm 

2
44

1
    echo 1089 % 37;
5_______0_______
    echo 1089 % 37;
7
3
    echo 1089 % 37;
9
4
14_______1
5
14_______3

0
3
5

Giá trị thứ hai không chính xác vì 0. 2 chia hết thành 18. 8 hoàn hảo. Đây chỉ là thiếu sót của phép tính ở dạng dấu chấm động mà máy tính sử dụng

Mô đun chính xác tùy ý

PHP cũng có các hàm để tính Mô-đun cho các số chính xác tùy ý bằng cách sử dụng hàm 

2
46 từ BC Math. Hãy nhớ rằng cả hai số phải được chuyển thành chuỗi để hàm hoạt động. Dưới đây là một số ví dụ

________10____11_______

2
3
9_______14__________
    // Output: 16

1
4
15_______3
5
15_______5

0
    // Output: 16

7

2
    // Output: 16

9

4
    echo 1089 % 37;
1

Công dụng của toán tử Modulo

Trong hướng dẫn này, chúng tôi sẽ giới hạn bản thân ở modulo số nguyên vì nó phổ biến hơn nhiều và có rất nhiều ứng dụng

Kiểm tra xem một số có phải là bội số của một số khác không

Kết quả của toán tử modulo bằng 0 nếu số đầu tiên chia hết cho số thứ hai. Điều này có thể được sử dụng để kiểm tra xem một số có phải là bội số của số kia trong một cặp số đã cho hay không. Có lẽ cách sử dụng phổ biến nhất thuộc tính này của toán tử modulo là kiểm tra xem một số là chẵn hay lẻ. Đây là một ví dụ

________10____11_______

2
4
5
3
4
7
4
16_______9
5
17_______1

0
    echo 1089 % -37;
3

2
    echo 1089 % -37;
5

4
    echo 1089 % -37;
7

6
    echo 1089 % 37;
1

Trong ví dụ trên, bạn có thể lấy danh sách màu từ người dùng và yêu cầu họ chỉ cung cấp số lượng màu chẵn

Ví dụ dưới đây sử dụng một lý do tương tự để tạo các nhóm có 5 sinh viên mỗi nhóm. Trong cuộc sống thực, bạn sẽ phải sử dụng thêm mã để nhóm các học sinh, nhưng ý tưởng cơ bản để kiểm tra xem tổng số học sinh có phải là bội số của 5 không thay đổi

________10____11_______

2
5
3_______14_______
5
5
4
18_______7
5
17_______3

0
    // Output: 16

1

2
    echo 1089 % -37;
7

4
    echo 1089 % 37;
1

Đổi số thành bội số của một số khác

Trong phần trên, chúng tôi đã sử dụng toán tử modulo để yêu cầu người dùng chỉ cung cấp các giá trị đầu vào theo bội số nhất định. Nếu điều đó là không thể, chúng ta cũng có thể buộc đầu vào là số chẵn cũng như bội số của 5 hoặc một số số khác

Toán tử modulo cung cấp toàn bộ số còn lại sau khi chia số thứ nhất cho số thứ hai. Điều này có nghĩa là trừ phần còn lại từ số đầu tiên sẽ làm cho nó trở thành bội số của số thứ hai. Ví dụ: 28 có thể đổi thành bội số của 5 bằng cách lấy modulo 28 % 5. Trong trường hợp này, modulo sẽ là 3. Bây giờ chúng ta có thể trừ 3 từ số ban đầu để biến nó thành bội số của 5. Dòng sau sẽ buộc bất kỳ số dương nào _______0_______47 là bội số của một số dương khác 

2
48 bằng cách lấy nó trừ đi một giá trị thích hợp

1
    // Output: 16

7

Trong ví dụ trước của chúng tôi với 28 sinh viên, chúng tôi chỉ có thể loại bỏ 3 sinh viên và nhóm các sinh viên khác lại với nhau

________10____11_______

2

01_______14__________
5
5
4
18_______7
5
17_______3

0

09

2

11

4

13

6
    echo 1089 % -37;
7_______11_______8_______13_______1

Đặt giới hạn cho đầu vào

Như mình đã đề cập ở đầu bài, trong trường hợp là số dương, toán tử modulo sẽ trả về một số nằm trong khoảng từ 0 đến N - 1, trong đó N là ước số. Điều này có nghĩa là bạn có thể đặt giới hạn cho bất kỳ đầu vào nào và thực hiện một số thao tác lặp đi lặp lại và tuần tự. Đây là một ví dụ

1

2

21_______14__________
4
7
4
11_______25
5
11_______27

0

29

2

31

4

33

6
    echo 1089 % -37;
7_____11_______8_______13_______1

Trong ví dụ trên, chúng tôi chỉ có năm màu nhưng có tổng cộng 180 hình ảnh. Điều này có nghĩa là chúng tôi sẽ phải lặp lại năm màu giống nhau và gán chúng cho tất cả các hình ảnh của chúng tôi. Toán tử modulo hoàn toàn phù hợp với nhu cầu này. Nó sẽ giới hạn giá trị của 

2
49 trong khoảng từ 0 đến (5 - 1) hoặc bao gồm cả 4. Nói cách khác, chúng ta có thể dễ dàng chọn tất cả các màu của mảng theo thứ tự

Thực hiện một số nhiệm vụ mỗi lần thứ n trong một vòng lặp

Khi đi qua một vòng lặp, chúng ta có thể kiểm tra giá trị của một biến tăng dần với mỗi lần đi qua vòng lặp và thực hiện một tác vụ cụ thể sau mỗi lần lặp thứ n. Một trường hợp sử dụng thực tế mà tôi nghĩ đến là cập nhật cho người dùng về một quy trình dài hạn. Giả sử bạn đang thay đổi 1.000 hình ảnh khác nhau bằng PHP. Nếu các thay đổi là đáng kể, quá trình này sẽ mất một lúc để cập nhật tất cả các hình ảnh

Trong những trường hợp như vậy, người dùng sẽ không có cách nào biết liệu chương trình chỉ bị kẹt hay thực sự có bất kỳ tiến triển nào. Những gì bạn có thể làm là báo cáo tiến độ cho người dùng sau khi chỉnh sửa mỗi hình ảnh thứ 10

________10____11_______

2

41
3
___

43
4
11_______45
5
11_______47

0

49

2

51

4

53

6_______17_______7_______11_______8_______13_______1

Hàm 

2
50 trong ví dụ trên hoàn toàn được tạo sẵn, nhưng bạn có thể thay thế nó bằng các quy trình khác như thay đổi kích thước hình ảnh, thêm hình mờ, biến chúng thành thang độ xám, v.v. (Hãy xem hướng dẫn chỉnh sửa hình ảnh PHP GD của tôi nếu bạn muốn tự mình tìm hiểu cách chỉnh sửa hình ảnh bằng lập trình trong PHP. )

Chuyển đổi giữa các đơn vị đo lường khác nhau

Toán tử modulo cũng có thể được sử dụng để chuyển đổi giữa các đơn vị đo lường khác nhau. Ví dụ: bạn có thể sử dụng nó để thay đổi khoảng thời gian được biểu thị bằng giây thành cùng khoảng thời gian được biểu thị bằng giờ, phút và giây. Tương tự, bạn cũng có thể chuyển đổi một số lượng lớn cm thành km, mét và cm. Đây là một ví dụ

1

2

61_______14__________

63
4
11_______65
5
11_______67_______11_______0

69

2
    echo 1089 % 37;
1

Chúng tôi bắt đầu bằng cách chia tổng số giây cho 3.600 và chuyển giá trị thành một số nguyên. Điều này mang lại cho chúng tôi tổng số giờ vì mỗi giờ có 3.600 giây

Trong bước tiếp theo, chúng tôi trừ đi 

2
51 từ số giây ban đầu. Điều này loại bỏ tất cả giây mà chúng tôi đã chuyển đổi thành giờ. Chia cho 60 bây giờ sẽ cho chúng ta tổng số phút. Cuối cùng, chúng tôi sử dụng toán tử modulo để lấy số giây

Tính GCD của hai số

Bạn cũng có thể sử dụng toán tử modulo để tính nhanh ước số chung lớn nhất (GCD) của hai số. Bí quyết là tiếp tục tính modulo của các số và gán lại chúng cho đến khi chúng chia hết

1

2

75
3

77
4

79
5

81

0

83

2

53

4

87

6
    echo 1089 % -37;
7

8

91
2
0

93
2
2

95
2
4

97
2
6

99
2
8
    echo 1089 % 37;
1

Chúng tôi tiếp tục tính toán 

2
52 nếu
2
38 không chia hết 
2
37. Sau mỗi phép tính,
2
38 được gán cho 
2
37 và modulo mà chúng ta đã tính toán trước đó được gán cho
2
38. Giá trị của 
2
38 khi modulo trở thành 0 là GCD của chúng tôi

Tính toán mô-đun với lũy thừa mô-đun

Lũy thừa mô-đun được sử dụng trong nhiều lĩnh vực trong khoa học máy tính như mật mã. Nó dựa trên một thuộc tính của mô đun trong đó

1
2
03

Chúng ta có thể tạo một hàm dựa trên tính chất trên để tính phần dư khi chia x y cho m

1

2
2
07
3
2
09
4
2
11
5

53

0
2
15

2
2
17

4
2
19

6

53

8
2
23
2
0
    echo 1089 % -37;
7
2
2
2
27
2
4
2
29
2
6
    echo 1089 % 37;
1

Tính modulo bằng cách ước tính số mũ 44 123 trước tiên sẽ cho chúng ta một số có 203 chữ số. Nó sẽ lớn hơn nhiều nếu số mũ trên 1.000. Trong những trường hợp như vậy, sử dụng chức năng trên sẽ cho chúng ta modulo nhanh hơn nhiều

Hàm chỉ trả về 0 nếu số chia là 1. Mặt khác, nó chạy một vòng lặp for với số lần lặp lại là

2
59 và tính toán mô đun tại mỗi điểm. Kết quả cuối cùng chỉ đơn giản là phần còn lại mà chúng ta sẽ nhận được bằng cách tính giá trị của biểu thức hàm mũ và lấy modulo của kết quả

Suy nghĩ cuối cùng

Như bạn đã thấy trong hướng dẫn này, toán tử modulo, mặc dù dễ sử dụng, nhưng có rất nhiều ứng dụng. Chúng tôi bắt đầu hướng dẫn này bằng cách xem modulo của cả số dương và số âm, cũng như số float. Sau đó, chúng tôi đề cập đến một số tình huống phổ biến mà chúng tôi sẽ sử dụng modulo

Nếu bạn có bất kỳ câu hỏi nào liên quan đến hướng dẫn này, vui lòng cho tôi biết trong phần bình luận. Bạn có bất kỳ cách sử dụng modulo nào khác trong tâm trí không?

Học PHP với một khóa học trực tuyến miễn phí

Nếu bạn muốn học PHP, hãy xem khóa học trực tuyến miễn phí của chúng tôi về các nguyên tắc cơ bản của PHP

Trong khóa học này, bạn sẽ học các nguyên tắc cơ bản của lập trình PHP. Bạn sẽ bắt đầu với những kiến ​​thức cơ bản, học cách PHP hoạt động và viết các hàm và vòng lặp PHP đơn giản. Sau đó, bạn sẽ xây dựng các lớp mã hóa để lập trình hướng đối tượng đơn giản (OOP). Đồng thời, bạn sẽ học tất cả các kỹ năng quan trọng nhất để viết ứng dụng cho web. bạn sẽ có cơ hội thực hành phản hồi các yêu cầu GET và POST, phân tích cú pháp JSON, xác thực người dùng và sử dụng cơ sở dữ liệu MySQL

Làm cách nào để chia và lấy phần còn lại trong PHP?

Hàm fmod() trả về phần còn lại (mô-đun) của x/y.

Bạn sẽ sử dụng toán tử nào để tìm phần còn lại sau khi chia PHP?

Các toán tử mô đun trả về phần còn lại của hai số sau khi chia.

Làm cách nào để lấy modulo trong PHP?

Nếu bạn có hai biến $a và $b , việc tính toán $a % $b —thường được phát âm là "a modulo b" hoặc "a mod b"—sẽ cho bạn kết quả . Modulo là một toán tử số nguyên, vì vậy nó chuyển đổi cả hai toán hạng thành số nguyên trước khi tính toán phần còn lại. . Modulo is an integer operator, so it converts both the operands to integers before calculating the remainder.

Làm cách nào để chia một số trong PHP?

Hàm intdiv() dùng để chia số nguyên.