fractions --- Số hữu tỉ¶
Source code: Lib/fractions.py
Mô-đun fractions cung cấp hỗ trợ cho số học hợp lý.
Một thể hiện Phân số có thể được xây dựng từ một cặp số hữu tỷ, từ một số đơn hoặc từ một chuỗi.
- class fractions.Fraction(numerator=0, denominator=1)¶
- class fractions.Fraction(number)
- class fractions.Fraction(string)
Phiên bản đầu tiên yêu cầu numerator và denominator là phiên bản của
numbers.Rationalvà trả về một phiên bảnFractionmới có giá trị bằngnumerator/denominator. Nếu denominator bằng 0, nó sẽ tăngZeroDivisionError.Phiên bản thứ hai yêu cầu number là một phiên bản của
numbers.Rationalhoặc có phương thứcas_integer_ratio()(điều này bao gồmfloatvàdecimal.Decimal). Nó trả về một phiên bảnFractioncó cùng giá trị. Giả sử rằng phương thứcas_integer_ratio()trả về một cặp số nguyên nguyên tố cùng nhau và số cuối cùng là dương. Lưu ý rằng do các vấn đề thông thường với điểm nhị phân (xem Số học dấu phẩy động: Các vấn đề và hạn chế), đối số củaFraction(1.1)không chính xác bằng 11/10, và do đóFraction(1.1)sẽ trả về not như người ta mong đợi. (Nhưng hãy xem tài liệu về phương pháplimit_denominator()bên dưới.)Phiên bản cuối cùng của hàm tạo mong đợi một chuỗi. Hình thức thông thường cho trường hợp này là:
[dấu] tử số ['/' mẫu số]
trong đó
signtùy chọn có thể là '+' hoặc '-' vànumeratorvàdenominator(nếu có) là các chuỗi chữ số thập phân (dấu gạch dưới có thể được sử dụng để phân cách các chữ số như với các chữ số nguyên trong mã). Ngoài ra, bất kỳ chuỗi nào đại diện cho một giá trị hữu hạn và được hàm tạofloatchấp nhận thì cũng được hàm tạoFractionchấp nhận. Ở cả hai dạng, chuỗi đầu vào cũng có thể có khoảng trắng ở đầu và/hoặc cuối. Dưới đây là một số ví dụ:>>> từ phân số nhập Phân số >>> Phân số(16, -10) Phân số(-8, 5) >>> Phân số(123) Phân số(123, 1) >>> Phân số() Phân số(0, 1) >>> Phân số('3/7') Phân số(3, 7) >>> Phân số(' -3/7 ') Phân số(-3, 7) >>> Phân số('1.414213 \t\n') Phân số(1414213, 1000000) >>> Phân số('-.125') Phân số(-1, 8) >>> Phân số('7e-6') Phân số(7, 1000000) >>> Phân số (2,25) Phân số(9, 4) >>> Phân số (1.1) Phân số(2476979795053773, 2251799813685248) >>> từ nhập thập phân Thập phân >>> Phân số(Thập phân('1.1')) Phân số(11, 10)
Lớp
Fractionkế thừa từ lớp cơ sở trừu tượngnumbers.Rationalvà triển khai tất cả các phương thức và thao tác từ lớp đó. Các phiên bảnFractionlà hashable và phải được coi là không thể thay đổi. Ngoài ra,Fractioncòn có các thuộc tính và phương thức sau:Thay đổi trong phiên bản 3.2: Hàm tạo
Fractionhiện chấp nhận các phiên bảnfloatvàdecimal.Decimal.Thay đổi trong phiên bản 3.9: Chức năng
math.gcd()hiện được sử dụng để chuẩn hóa numerator và denominator.math.gcd()luôn trả về loạiint. Trước đây, loại GCD phụ thuộc vào numerator và denominator.Thay đổi trong phiên bản 3.11: Hiện tại, dấu gạch dưới được cho phép khi tạo phiên bản
Fractiontừ một chuỗi, tuân theo các quy tắc PEP 515.Thay đổi trong phiên bản 3.11:
Fractiontriển khai__int__ngay bây giờ để đáp ứng việc kiểm tra phiên bảntyping.SupportsInt.Thay đổi trong phiên bản 3.12: Cho phép có khoảng trống xung quanh dấu gạch chéo đối với đầu vào chuỗi:
Fraction('2 / 3').Thay đổi trong phiên bản 3.12: Các phiên bản
Fractionhiện hỗ trợ định dạng kiểu float, với các kiểu trình bày"e","E","f","F","g","G"và"%"".Thay đổi trong phiên bản 3.13: Định dạng của các phiên bản
Fractionkhông có loại bản trình bày hiện hỗ trợ điền, căn chỉnh, xử lý ký hiệu, độ rộng tối thiểu và nhóm.Thay đổi trong phiên bản 3.14: Hàm tạo
Fractionhiện chấp nhận bất kỳ đối tượng nào có phương thứcas_integer_ratio().- numerator¶
Tử số của phân số ở số hạng nhỏ nhất.
- denominator¶
Mẫu số của phân số ở dạng tối giản. Đảm bảo là tích cực.
- as_integer_ratio()¶
Trả về một bộ gồm hai số nguyên, có tỷ lệ bằng Phân số ban đầu. Tỷ lệ này ở dạng thấp nhất và có mẫu số dương.
Added in version 3.8.
- is_integer()¶
Trả về
Truenếu Phân số là số nguyên.Added in version 3.12.
- classmethod from_float(f)¶
Hàm tạo thay thế chỉ chấp nhận các phiên bản của
floathoặcnumbers.Integral. Xin lưu ý rằngFraction.from_float(0.3)không có cùng giá trị vớiFraction(3, 10).
- classmethod from_decimal(dec)¶
Hàm tạo thay thế chỉ chấp nhận các phiên bản của
decimal.Decimalhoặcnumbers.Integral.Ghi chú
Từ Python 3.2 trở đi, bạn cũng có thể tạo phiên bản
Fractiontrực tiếp từ phiên bảndecimal.Decimal.
- classmethod from_number(number)¶
Hàm tạo thay thế chỉ chấp nhận các phiên bản của
numbers.Integral,numbers.Rational,floathoặcdecimal.Decimalvà các đối tượng có phương thứcas_integer_ratio()chứ không phải chuỗi.Added in version 3.14.
- limit_denominator(max_denominator=1000000)¶
Tìm và trả về
Fractiongần nhất vớiselfcó mẫu số tối đa max_denominator. Phương pháp này rất hữu ích để tìm các giá trị gần đúng hợp lý cho một số dấu phẩy động đã cho:>>> from fractions import Fraction >>> Fraction('3.1415926535897932').limit_denominator(1000) Fraction(355, 113)
hoặc để khôi phục một số hữu tỷ được biểu diễn dưới dạng số float:
>>> from math import pi, cos >>> Fraction(cos(pi/3)) Fraction(4503599627370497, 9007199254740992) >>> Fraction(cos(pi/3)).limit_denominator() Fraction(1, 2) >>> Fraction(1.1).limit_denominator() Fraction(11, 10)
- __floor__()¶
Trả về
int<= selflớn nhất. Phương pháp này cũng có thể được truy cập thông qua hàmmath.floor():>>> from math import floor >>> floor(Fraction(355, 113)) 3
- __ceil__()¶
Trả về ít nhất
int>= self. Phương pháp này cũng có thể được truy cập thông qua hàmmath.ceil().
- __round__()¶
- __round__(ndigits)
Phiên bản đầu tiên trả về
intgần nhất thànhself, làm tròn một nửa thành số chẵn. Phiên bản thứ hai làm trònselfthành bội số gần nhất củaFraction(1, 10**ndigits)(về mặt logic, nếundigitsâm), một lần nữa làm tròn một nửa về phía chẵn. Phương pháp này cũng có thể được truy cập thông qua hàmround().
- __format__(format_spec, /)¶
Cung cấp hỗ trợ định dạng các phiên bản
Fractionthông qua phương thứcstr.format(), hàm tích hợpformat()hoặc Formatted string literals.Nếu chuỗi đặc tả định dạng
format_speckhông kết thúc bằng một trong các loại bản trình bày'e','E','f','F','g','G'hoặc'%'thì việc định dạng tuân theo các quy tắc chung về điền, căn chỉnh, xử lý ký hiệu, độ rộng tối thiểu và nhóm như được mô tả trong format specification mini-language. Cờ "dạng thay thế"'#'được hỗ trợ: nếu có, nó buộc chuỗi đầu ra luôn bao gồm mẫu số rõ ràng, ngay cả khi giá trị được định dạng là số nguyên chính xác. Cờ không điền'0'không được hỗ trợ.Nếu chuỗi đặc tả định dạng
format_speckết thúc bằng một trong các loại bản trình bày'e','E','f','F','g','G'hoặc'%'thì việc định dạng sẽ tuân theo các quy tắc được nêu cho loạifloattrong phần Đặc tả định dạng ngôn ngữ nhỏ.Dưới đây là một số ví dụ:
>>> từ phân số nhập Phân số >>> định dạng(Phân số(103993, 33102), '_') '103_993/33_102' >>> format(Phân số(1, 7), '.^+10') '...+1/7...' >>> định dạng(Phân số(3, 1), '') '3' >>> format(Phân số(3, 1), '#') '3/1' >>> format(Phân số(1, 7), '.40g') '0,1428571428571428571428571428571428571429' >>> định dạng(Phân số('1234567.855'), '_.2f') '1_234_567.86' >>> f"{Phân số(355, 113):*>20.6e}" '********3.141593e+00' >>>giá cũ, giá mới = 499, 672 >>> "{:.2%} tăng giá".format(Fraction(new_price, old_price) - 1) 'Tăng giá 34,67%'
Xem thêm
- Mô-đun
numbers Các lớp cơ sở trừu tượng tạo nên tháp số.