Hướng dẫn what is the difference between decimal and float in python? - sự khác biệt giữa thập phân và float trong python là gì?

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.

Sự khác biệt giữa thập phân và phao là gì?

Float lưu trữ một giá trị gần đúng và số thập phân lưu trữ một giá trị chính xác. Tóm lại, các giá trị chính xác như tiền nên sử dụng thập phân và các giá trị gần đúng như các phép đo khoa học nên sử dụng phao. Khi nhân số không số nguyên và chia cho cùng một số đó, số thập phân sẽ mất độ chính xác trong khi phao không.. In summary, exact values like money should use decimal, and approximate values like scientific measurements should use float. When multiplying a non integer and dividing by that same number, decimals lose precision while floats do not.

Tôi nên sử dụng decimal hay float python?

Số thập phân có thể phải chịu đựng các vấn đề chính xác của chính họ, nhưng nói chung, số thập phân chính xác hơn phao.Sự khác biệt về hiệu suất giữa Float và thập phân, với Python 3, không phải là kỳ quặc và theo kinh nghiệm của tôi, lợi ích chính xác của một số thập phân lớn hơn lợi ích hiệu suất của một chiếc phao.decimals are more precise than floats. The performance difference between float and decimal, with Python 3, is not outlandish, and in my experience, the precision benefits of a decimal outweigh the performance benefits of a float.

Có phải là một số thập phân trong Python?

Số điểm nổi hoặc phao là một loại dữ liệu Python khác.Phao là số thập phân, tích cực, tiêu cực và không.Phao cũng có thể là số trong ký hiệu khoa học có chứa số mũ.Floats are decimals, positive, negative and zero. Floats can also be numbers in scientific notation which contain exponents.

Float có phải là số thập phân không?

Kiểu dữ liệu float chỉ có 6-7 chữ số thập phân có độ chính xác.Điều đó có nghĩa là tổng số chữ số, không phải số ở bên phải của dấu thập phân.. That means the total number of digits, not the number to the right of the decimal point.