7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Python

Các Mô-đun Toán học trong Python: Decimal và Fractions

Scroll to top
Read Time: 6 mins
This post is part of a series called Mathematical Modules in Python.
Mathematical Modules in Python: Random
Mathematical Modules in Python: Statistics

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Ngay cả những phép toán cơ bản nhất có thể đôi khi cho ra một kết quả sai. Điều này xảy ra do các hạn chế trong việc lưu trữ giá trị chính xác của một số. Bạn có thể vượt qua những hạn chế này bằng cách sử dụng mô-đun decimal trong Python. Tương tự, mô-đun math lẫn cmath mà chúng ta đã học được trong hướng dẫn trước của chúng tôi đều không thể giúp chúng ta thực hiện phép tính số học dựa theo phân số. Tuy nhiên, mô-đun fractions trong Python thực hiện chính xác điều đó.

Trong hướng dẫn này, bạn sẽ tìm hiểu về cả hai mô-đun này và các hàm khác nhau mà chúng cung cấp.

Tại sao Chúng ta Cần Mô-đun Decimal?

Có lẽ bạn sẽ tự hỏi tại sao chúng ta cần một mô-đun để thực hiện phép toán số học cơ bản với các số thập phân khi chúng ta có thể làm như vậy bằng cách sử dụng float.

Trước khi tôi trả lời câu hỏi này, tôi muốn bạn đoán về giá trị đầu ra nếu bạn gõ 0.1 + 0.2 trong giao diện console của Python. Nếu bạn đoán rằng đầu ra là 0.3, thì bạn sẽ ngạc nhiên khi bạn kiểm tra kết quả thực tế, đó là 0.30000000000000004. Bạn có thể thử một số phép tính khác như 0.05 + 0.1 và bạn sẽ nhận được 0.15000000000000002.

Để hiểu điều gì đang xảy ra ở đây, hãy cố gắng biểu diễn 1/3 ở dạng thập phân, và bạn sẽ nhận thấy rằng số này thật sự không dừng lại ở cơ số 10. Tương tự như vậy, một số số như 0.1 hoặc 1/10 không dừng lại ở cơ số 2. Vì những con số này vẫn cần phải được biểu diễn bằng cách nào đó, một số xấp xỉ được tạo ra khi lưu trữ chúng, dẫn đến những sai số đó.

Số 0.30000000000000004 thực sự rất gần với 0,3, do đó, phần lớn chúng ta có thể bỏ đi phần xấp xỉ này. Thật không may, phần xấp xỉ này sẽ không thể loại bỏ khi bạn đang mô phỏng một vụ phóng vệ tinh hoặc xử lý tiền. Một vấn đề khác với những xấp xỉ này là các lỗi vẫn tiếp tục tồn tại.

Để có được những kết quả chính xác mà chúng ta thường xử lý với chúng khi thực hiện các phép tính bằng tay, chúng ta cần một cái gì đó hỗ trợ tính toán số thập phân dấu chấm động một cách nhanh chóng, chính xác và mô-đun decimal thực hiện chính xác điều đó.

Sử dụng Mô-đun Decimal

Trước khi sử dụng mô-đun, bạn cần phải import nó trước. Sau đó, bạn có thể tạo các số thập phân từ các số nguyên, chuỗi, float, hoặc tuple. Khi số thập phân đã được cấu trúc từ một số nguyên hoặc một float, có một sự chuyển đổi chính xác của giá trị số đó. Hãy xem các ví dụ dưới đây để biết rõ tôi muốn nói gì:

Như bạn thấy, giá trị của Decimal(0,05) hơi khác so với Decimal('0,05'). Điều này có nghĩa là khi bạn cộng 0.05 và 0.1, bạn nên sử dụng decimal.Decimal('0.05')decimal.Decimal('0.1') để cấu trúc các số thập phân.

Bây giờ bạn có thể thực hiện các phép toán khác nhau trên các số thập phân, bạn có thể muốn kiểm soát độ chính xác hoặc làm tròn cho những phép toán đó. Điều này có thể được thực hiện bằng cách sử dụng hàm getcontext(). Hàm này cho phép bạn lấy cũng như thiết lập giá trị của các tuỳ chọn chính xác và làm tròn, cùng với những thứ khác.

Xin lưu ý rằng cả làm tròn và độ chính xác chỉ có tác dụng trong các phép toán số học chứ không phải lúc bạn tự tạo ra bản thân các số thập phân.

Bạn cũng có thể sử dụng một số hàm toán học như sqrt(), exp(), và log() với các số thập phân. Dưới đây là vài ví dụ:

Sử dụng Mô-đun Fractions

Đôi khi, bạn có thể phải đối mặt với những tình huống nơi mà bạn cần phải thực hiện các phép toán khác nhau trên phân số hoặc kết quả cuối cùng cần phải là một phân số. Mô-đun fractions có thể rất hữu ích trong những trường hợp này. Nó cho phép bạn tạo ra một đối tượng Fraction từ các con số, số float, số thập phân, và thậm chí cả chuỗi. Cũng giống như mô-đun decimal, có một số vấn đề với mô-đun này cũng như khi nói đến việc tạo các phân số từ các số float. Dưới đây là vài ví dụ:

Bạn cũng có thể thực hiện các phép toán toán học đơn giản như cộng và trừ trên các phân số giống như số bình thường.

Mô-đun này cũng có một vài phương thức quan trọng như limit_denominator(max_denominator) sẽ tìm và trả về một phân số gần nhất với giá trị của một phân số nhất định có mẫu số lớn nhất là max_denominator. Bạn cũng có thể trả về tử số của một phân số nhất định trong giới hạn thấp nhất bằng cách sử dụng thuộc tính numerator và mẫu số bằng cách sử dụng thuộc tính denominator.

Bạn cũng có thể sử dụng mô-đun này với các hàm khác nhau trong mô-đun math để thực hiện các phép tính dựa trên phân số.

Tóm tắt

Hai mô-đun này chắc là đủ để giúp bạn thực hiện các phép toán thông thường trên cả số thập phân và phân số. Như trình bày trong phần cuối, bạn có thể sử dụng các mô-đun này cùng với mô-đun math để tính toán giá trị của tất cả các kiểu hàm toán học theo định dạng mà bạn mong muốn.

Trong hướng dẫn tiếp theo của loạt bài này, bạn sẽ được tìm hiểu về mô-đun random trong Python.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.