2016-03-27 20 views

cevap

3

: nedeniyle ikili kayan nokta (Floating Point Arithmetic: Issues and Limitations bakınız) ile olağan sorunları nedeniyle, Fraction(1.1) argüman 11/10 tam olarak eşit değildir ve bu nedenle Fraction(1.1)değil dönüşü Fraction(11, 10) yaptığı

Not

beklendiği gibi. (Aşağıda bulunan limit_denominator() yöntemi için belgelere bakın.)

Temelde, 2.6 kesin ikili temsil edilemez. Yukarıdaki alıntıda yer alan Sorunlar ve Sınırlamalar bağlantısı çok daha fazla ayrıntıya girer.

>>> from fractions import Fraction 
>>> Fraction(2.6) 
Fraction(5854679515581645, 2251799813685248) 
>>> Fraction(2.6).limit_denominator(100) 
Fraction(13, 5) 

Alternatif olarak, (zaten keşfettim görünüyor) girdileri dize kullanabilirsiniz:

olarak burada yardım etmek limit_denominator() kullanabilirsiniz önerdi.

+0

Sınır payda yöntemi her zaman sorunu çözmez ve aynı zamanda hatalı sonuç verebilir. Örneğin. 'Fraksiyon (2.36)' büyük tamsayıları döndürür, 'Kesir (2.36) .limit_denominator (10)', 'Fraksiyon (19,8)' olan 2.375 değerini döndürür. En yakın kesir 59/25. Paydanın maksimum sınırını nasıl bilmesi gerekiyor? ya da daha doğrusu bir limit için iyi bir aralık/tahmin nedir? – lapin

+1

Bu doğru. "Paydanın maksimum sınırını nasıl bilmem gerekiyor?" Benim önerim, argümanlarınızı dizelere dönüştürerek yapabileceğiniz problemlerden kaçınmaktır (örneğin, 'Fraksiyon (str (2.36))'). Ama bu her zaman işe yaramaz; Bazı değerler basitçe _cannot_ kesirler tarafından kesin olarak temsil edilir. Eğer paydamızın limitini yuvarlatılmış argümandaki rakamların sırasına göre ayarladıysanız, 10. adımda çalıştığınızı farz edersiniz. Tamamen 2.36'dan itibaren üç basamaklı olduğu için '10 ** 3' kullanın. payda sınırınız olarak. – Chris

+0

10 ** 2 değil mi? 236/1? – lapin