Mục lục
- Giới thiệu
- Phao
- Số thập phân
- Phân số
- Suy nghĩ cuối cùng
Giới thiệu
Phao
Phao
Số thập phân
>>> print[f"{0.1:.18f}"]
0.100000000000000006
Phân số
>>> .1 + .1 + .1 == .3
False
>>> .1 + .1 + .1
0.30000000000000004
Suy nghĩ cuối cùng
>>> round[.1 + .1 + .1, 10] == round[.3, 10]
True
>>> round[.1 + .1 + .1, 10]
0.3
Cả hai loại float và thập phân đều lưu trữ các giá trị số trong Python và lúc đầu, việc chọn khi nào nên sử dụng mỗi giá trị có thể gây nhầm lẫn. Tài liệu thập phân Python sườn là điểm khởi đầu tốt để tìm hiểu khi nào nên sử dụng số thập phân. Nói chung, số thập phân tồn tại trong Python để giải quyết các vấn đề chính xác của phao.
Số thập phân
Phân số
Suy nghĩ cuối cùng
>>> from decimal import Decimal
>>> print[f"{Decimal['0.1']:.18f}"]
0.100000000000000000
>>> Decimal['.1'] + Decimal['.1'] + Decimal['.1'] == Decimal['.3']
True
Cả hai loại float và thập phân đều lưu trữ các giá trị số trong Python và lúc đầu, việc chọn khi nào nên sử dụng mỗi giá trị có thể gây nhầm lẫn. Tài liệu thập phân Python sườn là điểm khởi đầu tốt để tìm hiểu khi nào nên sử dụng số thập phân. Nói chung, số thập phân tồn tại trong Python để giải quyết các vấn đề chính xác của phao.
>>> from decimal import Decimal
>>> Decimal[0.01] == Decimal["0.01"]
False
Sử dụng phao khi tiện lợi và tốc độ quan trọng. Một chiếc phao cung cấp cho bạn một xấp xỉ số lượng bạn khai báo. Ví dụ: nếu tôi in 0,1 với 18 số thập phân, tôi thực sự không nhận được 0,1 mà thay vào đó là một xấp xỉ.
>>> Decimal[0.01]
Decimal['0.01000000000000000020816681711721685132943093776702880859375']
>>> Decimal["0.01"]
Decimal['0.01']
Tương tự, khi thực hiện các hoạt động, chẳng hạn như bổ sung với phao, bạn nhận được một xấp xỉ, có thể dẫn đến mã khó hiểu, chẳng hạn như sau.
Phân số
Suy nghĩ cuối cùng
Cả hai loại float và thập phân đều lưu trữ các giá trị số trong Python và lúc đầu, việc chọn khi nào nên sử dụng mỗi giá trị có thể gây nhầm lẫn. Tài liệu thập phân Python sườn là điểm khởi đầu tốt để tìm hiểu khi nào nên sử dụng số thập phân. Nói chung, số thập phân tồn tại trong Python để giải quyết các vấn đề chính xác của phao.
>>> from decimal import Decimal
>>> Decimal['1'] / Decimal['3'] * Decimal['3'] == Decimal['1']
False
>>> Decimal['1'] / Decimal['3'] * Decimal['3']
Decimal['0.9999999999999999999999999999']
Sử dụng phao khi tiện lợi và tốc độ quan trọng. Một chiếc phao cung cấp cho bạn một xấp xỉ số lượng bạn khai báo. Ví dụ: nếu tôi in 0,1 với 18 số thập phân, tôi thực sự không nhận được 0,1 mà thay vào đó là một xấp xỉ.
>>> [1.0 / 3.0] * 3.0 == 1.0
True
Tương tự, khi thực hiện các hoạt động, chẳng hạn như bổ sung với phao, bạn nhận được một xấp xỉ, có thể dẫn đến mã khó hiểu, chẳng hạn như sau.
>>> from fractions import Fraction
>>> Fraction['1'] / Fraction['3'] * Fraction['3'] == Fraction['1']
True
Theo trực giác, sự bổ sung có ý nghĩa, và trong nháy mắt, bạn mong đợi tuyên bố là đúng. Tuy nhiên, vì xấp xỉ phao, hóa ra là sai. Điều này cho thấy một trong những vấn đề lớn với phao là thiếu thử nghiệm bình đẳng đáng tin cậy. Để khắc phục bài kiểm tra bình đẳng này mà không cần sử dụng số thập phân, chúng ta cần sử dụng làm tròn.
>>> Fraction[1.1] == Fraction["1.1"]
False
Suy nghĩ cuối cùng
Cả hai loại float và thập phân đều lưu trữ các giá trị số trong Python và lúc đầu, việc chọn khi nào nên sử dụng mỗi giá trị có thể gây nhầm lẫn. Tài liệu thập phân Python sườn là điểm khởi đầu tốt để tìm hiểu khi nào nên sử dụng số thập phân. Nói chung, số thập phân tồn tại trong Python để giải quyết các vấn đề chính xác của phao.
Decimal vs Float
- Cả thập phân và float đều được sử dụng để lưu trữ các giá trị số.
- Float là kiểu dữ liệu số gần đúng, có nghĩa là không phải tất cả các giá trị trong phạm vi kiểu dữ liệu có thể được biểu diễn chính xác, nó làm tròn các giá trị.
Trong trường hợp Decimal là loại dữ liệu có độ chính xác cố định, điều đó có nghĩa là tất cả các giá trị trong phạm vi kiểu dữ liệu có thể được biểu diễn chính xác với độ chính xác và tỷ lệ, nó không làm tròn các giá trị.
- Syntax::
1] thập phân [độ chính xác, tỷ lệ]Decimal[ Precision, Scale]
Ở đây, độ chính xác có nghĩa là tổng số chữ số, cả trước và sau điểm thập phân. Độ chính xác có phạm vi từ 1 đến 38. Độ chính xác mặc định là 38.Precision Means the total number of digits, both before and after the decimal point. The precision has a range from 1 to 38. The default precision is 38.
và tỷ lệ là số chữ số sau điểm thập phân. Chỉ có thể được chỉ định nếu độ chính xác được chỉ định. Thang đo phải luôn luôn nhỏ hơn hoặc bằng độ chính xác.Scale is the number of digits after the decimal point.Scale can only be specified if Precision is specified. The scale must always be less than or equal to the precision.
Cân nhắc lưu trữ với loại dữ liệu thập phân:
2]Float[n]Float[n]
Trong trường hợp này, N cho biết trường sẽ chiếm 4 hoặc 8 byte. Kiểu dữ liệu Float hỗ trợ các giá trị trong các phạm vi này -1,79E+308 đến -2.23E -308, 0 và 2.23E -308 đến 1.79E+308.n indicates if the field will take up 4 or 8 bytes. The float data type supports values in these ranges -1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308.
Nếu số lượng ký tự trong ký hiệu khoa học về giá trị là từ 1 đến 24, độ chính xác là 7 chữ số và lưu trữ là 4 byte. Nếu số lượng ký tự trong ký hiệu khoa học về giá trị là từ 25 đến 53, độ chính xác là 15 chữ số và lưu trữ là 8 byte.
- Example:
- Trong SQL Server thập phân [8,4] và thập phân [8,2] là các loại dữ liệu khác nhau. Điều này có nghĩa là 5866.1688 và 586616,88 là các loại khác nhau nhưng trong trường hợp phao nổi [8] có thể giống như 5677.7665 này hoặc có thể giống như 58661.688 này đều là cùng loại dữ liệu.
- Float là một loại dữ liệu điểm nổi chính xác [32 bit] và thập phân là loại dữ liệu điểm nổi 128 bit.
- Kiểu dữ liệu điểm nổi đại diện cho các giá trị số với các phần phân số.
- Decimal đại diện chính xác bất kỳ số nào trong độ chính xác của định dạng thập phân, trong khi phao không thể đại diện chính xác tất cả các số.
- Decimal được sử dụng trong các ứng dụng tài chính đòi hỏi độ chính xác cao và dễ dàng để tránh các lỗi làm tròn trong khi Float được sử dụng khi bạn lưu trữ các số khoa học và để có hiệu suất tốt hơn.
- Hiệu suất của số thập phân chậm hơn và các loại dữ liệu nổi.
Nếu bạn chưa quen với SQL, hãy tham khảo video dưới đây để hiểu rõ hơn.