Các số dấu phẩy động không thể biểu thị chính xác hầu hết các số thập phân, vì vậy khi bạn nhập một dấu phẩy động theo nghĩa đen, bạn thực sự có được một xấp xỉ của chữ đó. Số gần đúng có thể lớn hơn hoặc nhỏ hơn số bạn đã nhập.
Bạn có thể thấy giá trị chính xác của số dấu phẩy động bằng cách chuyển nó thành Số thập phân hoặc Phân số.
>>> from decimal import Decimal
>>> Decimal(0.01)
Decimal('0.01000000000000000020816681711721685132943093776702880859375')
>>> from fractions import Fractio
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
Chúng tôi có thể sử dụng loại Phân số để tìm lỗi gây ra bởi nghĩa đen không chính xác của chúng tôi.
>>> float((Fraction(1)/Fraction(0.01)) - 100)
-2.0816681711721685e-15
Chúng ta cũng có thể tìm hiểu làm thế nào các số dấu phẩy động chính xác gấp đôi khoảng 100 bằng cách sử dụng tiếp theo từ numpy.
>>> from numpy import nextafter
>>> nextafter(100,0)-100
-1.4210854715202004e-14
Từ đó, chúng ta có thể phỏng đoán rằng số dấu phẩy động gần nhất 1/0.01000000000000000020816681711721685132943093776702880859375thực tế chính xác là 100.
Sự khác biệt giữa 1//0.01và int(1/0.01)là làm tròn. 1 // 0,01 làm tròn kết quả chính xác xuống toàn bộ số tiếp theo trong một bước duy nhất. Vì vậy, chúng tôi nhận được một kết quả 99.
int (1 / 0,01) mặt khác làm tròn theo hai giai đoạn, đầu tiên nó làm tròn kết quả đến số dấu phẩy động chính xác kép gần nhất (chính xác là 100), sau đó làm tròn số dấu phẩy động đó xuống số nguyên tiếp theo (đó là lại chính xác 100).