Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về mô-đun Python
4 hỗ trợ số học dấu phẩy động thập phân được làm tròn chính xác nhanhCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Giới thiệu về mô-đun thập phân Python
Nhiều số thập phân không có biểu diễn chính xác ở dạng dấu phẩy động nhị phân, chẳng hạn như 0. 1. Khi sử dụng những con số này trong các phép tính số học, bạn sẽ nhận được một kết quả mà mình không ngờ tới. Ví dụ
Code language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
đầu ra
Code language: CSS [css]
0.30000000000000004
kết quả là 0. 30000000000000004, không phải 0. 3
Để giải quyết vấn đề này, bạn sử dụng lớp
5 từ moduleCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
4 như sauCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
đầu ra
Code language: CSS [css]
0.3
Đầu ra như mong đợi
Mô-đun Python
4 hỗ trợ số học hoạt động giống như số học bạn học ở trườngCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Không giống như số float, Python biểu thị chính xác số thập phân. Và tính chính xác chuyển sang số học. Ví dụ: biểu thức sau trả về chính xác 0. 0
________số 8Bối cảnh thập phân
Số thập phân luôn liên kết với ngữ cảnh kiểm soát các khía cạnh sau
- Độ chính xác trong một phép toán số học
- thuật toán làm tròn
Theo mặc định, bối cảnh là toàn cầu. Bối cảnh toàn cầu là bối cảnh mặc định. Ngoài ra, bạn có thể đặt bối cảnh tạm thời sẽ có hiệu lực cục bộ mà không ảnh hưởng đến bối cảnh chung
Để lấy ngữ cảnh mặc định, bạn gọi hàm
8 từ mô-đunCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
4Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
1Code language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
Hàm
8 trả về ngữ cảnh mặc định, có thể là toàn cầu hoặc cục bộ
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Code language: JavaScript [javascript]
Để tạo ngữ cảnh mới sao chép từ ngữ cảnh khác, bạn sử dụng hàm
1Code language: CSS [css]
0.3
4Code language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
1 trả về ngữ cảnh mới được sao chép từ ngữ cảnhCode language: CSS [css]
0.3
3 nếu được chỉ địnhCode language: CSS [css]
0.3
Sau khi nhận được đối tượng ngữ cảnh, bạn có thể truy cập độ chính xác và làm tròn thông qua thuộc tính ________ 64 và ________ 65 tương ứng
6. lấy hoặc đặt độ chính xác. ctx. pre là một số nguyên mặc định là 28
Code language: CSS [css]0.3
7. nhận hoặc thiết lập cơ chế làm tròn. Làm tròn là một chuỗi. Nó mặc định là
Code language: CSS [css]0.3
8. Lưu ý nổi cũng sử dụng cơ chế làm tròn này
Code language: CSS [css]0.3
Python cung cấp các cơ chế làm tròn sau
Làm trònMô tảROUND_UPVòng ra xa số 0ROUND_DOWNVòng về số 0ROUND_CEILINGVòng tới trần nhà [về phía dương vô cùng]ROUND_FLOORvòng tới sàn [về phía âm vô cùng]ROUND_HALF_UPVòng tới gần nhất, cách xa số 0ROUND_HALF_DOWNvòng tới gần nhất, liền với số 0ROUND_HALF_EVENVòng tới gần nhất, liên kết với chẵn [chữ số có nghĩa nhỏ nhất]Ví dụ này minh họa cách lấy độ chính xác mặc định và làm tròn ngữ cảnh mặc định
2Code language: CSS [css]
0.30000000000000004
đầu ra
3Code language: CSS [css]
0.30000000000000004
Ví dụ sau đây cho thấy cơ chế làm tròn của
8 có hiệu lực như thế nàoCode language: CSS [css]
0.3
5Code language: CSS [css]
0.30000000000000004
đầu ra
0Code language: CSS [css]
0.30000000000000004
Nếu bạn thay đổi cách làm tròn thành
0, bạn sẽ nhận được một kết quả khácCode language: JavaScript [javascript]
Decimal['0.1'] + Decimal['0.1'] + Decimal['0.1'] - Decimal['0.3']
1
0.30000000000000004
Code language: CSS [css]
đầu ra
2Code language: CSS [css]
0.30000000000000004
Ví dụ sau đây cho bạn thấy cách sao chép ngữ cảnh mặc định và thay đổi cách làm tròn thành
0Code language: JavaScript [javascript]
Decimal['0.1'] + Decimal['0.1'] + Decimal['0.1'] - Decimal['0.3']
3Code language: CSS [css]
0.30000000000000004
đầu ra
4Code language: CSS [css]
0.30000000000000004
Lưu ý rằng bối cảnh cục bộ không ảnh hưởng đến bối cảnh toàn cầu. Sau khối with, Python sử dụng cơ chế làm tròn mặc định
hàm tạo thập phân
Hàm tạo
5 cho phép bạn tạo một đối tượngCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
5 mới dựa trên một giá trịCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
5Code language: CSS [css]
0.30000000000000004
Đối số
4 có thể là một số nguyên, chuỗi, tuple, float hoặc một đối tượng thập phân khác. Nếu bạn không cung cấp đối số giá trị, nó sẽ mặc định làCode language: JavaScript [javascript]
Decimal['0.1'] + Decimal['0.1'] + Decimal['0.1'] - Decimal['0.3']
5Code language: JavaScript [javascript]
Decimal['0.1'] + Decimal['0.1'] + Decimal['0.1'] - Decimal['0.3']
Nếu giá trị là một bộ, thì nó phải có ba thành phần. một dấu [0 cho số dương hoặc 1 cho số âm], một bộ chữ số và một số mũ nguyên
6Code language: CSS [css]
0.30000000000000004
Ví dụ
7Code language: CSS [css]
0.30000000000000004
Tuple có ba phần tử như sau
- dấu hiệu là 0
- chữ số là [3,1,4]
- số mũ là -2
Do đó, bạn sẽ cần chuyển bộ dữ liệu sau cho hàm tạo
5Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
8Code language: CSS [css]
0.30000000000000004
đầu ra
9Code language: CSS [css]
0.30000000000000004
Lưu ý rằng độ chính xác của ngữ cảnh thập phân chỉ ảnh hưởng đến phép toán số học, không ảnh hưởng đến hàm tạo
5. Ví dụCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
0Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Khi bạn sử dụng số float không có biểu diễn float nhị phân chính xác, hàm tạo
5 không thể tạo biểu diễn thập phân chính xác. Ví dụCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
1Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
đầu ra
2Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Trong thực tế, bạn sẽ sử dụng một chuỗi hoặc một bộ để tạo một
5Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Phép toán số thập phân
Một số toán tử số học không hoạt động giống như số float hoặc số nguyên, chẳng hạn như div [
10] và mod [Code language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
11Code language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
Đối với số thập phân, toán tử
10 thực hiện phép chia cụtCode language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
3Code language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
Lớp
5 cung cấp một số phép toán nhưCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]
14 vàCode language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
15. Tuy nhiên, nó không có tất cả các chức năng được định nghĩa trong mô-đunCode language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
16Code language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
Khi bạn sử dụng các hàm từ mô-đun
16 cho các số thập phân, Python sẽ chuyển các đối tượngCode language: PHP [php]
x = 0.1 y = 0.1 z = 0.1 s = x + y + z print[s]
5 thành số float trước khi thực hiện các phép tính số học. Điều này dẫn đến mất độ chính xác được xây dựng trong các đối tượng thập phânCode language: JavaScript [javascript]
import decimal from decimal import Decimal x = Decimal['0.1'] y = Decimal['0.1'] z = Decimal['0.1'] s = x + y + z print[s]