Ce face as_integer_ratio()
as_integer_ratio() returnează tuplul (a, b) cu a / b egal exact cu numărul, iar b pozitiv și cât mai mic. Pentru un float, arată valoarea reală stocată în memorie, ceea ce explică surprizele de precizie: 0.1 nu este exact o zecime.
Pentru calcule cu fracții folosește modulul fractions: Fraction(0.1) dă aceeași valoare exactă, iar Fraction("0.1") dă exact 1/10.
Ce returnează
Un tuplu de doi întregi.
Exemple
Exemplul 1: Valoarea exactă a unor numere
print((0.5).as_integer_ratio())
print((0.75).as_integer_ratio())
print((0.1).as_integer_ratio())
print((7).as_integer_ratio())
from fractions import Fraction
print(Fraction("0.1"), Fraction(0.1) == Fraction(*(0.1).as_integer_ratio()))
Rezultat
(1, 2)
(3, 4)
(3602879701896397, 36028797018963968)
(7, 1)
1/10 True
Greșeli frecvente
- Te aștepți ca
(0.1).as_integer_ratio()să fie(1, 10). Valoarea stocată este cea mai apropiată fracție binară; pentru 1/10 exact, pornește de la text:Fraction("0.1").
Comenzi înrudite
float(): Tipul numerelor cu zecimale; float() transformă un text sau un întreg în număr zecimal.float.hex() și float.fromhex(): Scrie un număr zecimal în format hexazecimal exact și îl citește înapoi.math.isclose(): Verifică dacă două numere zecimale sunt „suficient de apropiate” pentru a fi considerate egale.