2012-06-29 43 views
2

最接近的分數爲十進制與特定的分母Python的fractions模塊我可以這樣做:查找使用Python的分數模塊

>>> from fractions import Fraction 
>>> import math 
>>> target_number = str(10/math.pi) 
>>> Fraction(target_number) 
Fraction(39788735773, 12500000000) 

但我應該怎麼做,如果我想在十六分之一的一小部分?那就是,Fraction(51, 16)。使用limit_denominator(16)不僅使最大分母16:

>>> Fraction(target_number).limit_denominator(16) 
Fraction(35, 11) 

有沒有一種簡單的方法與fractions模塊做到這一點?

回答

4

它的簡單計算,你需要無fractions模塊分子 - 它只是16*target_number最接近的整數 - 如果你想有一個Fraction那麼你可以(也應該)只是說(不字符串化目標數,當然):

Fraction(int(round(16*target_number)),16) 

(它看起來,經驗,彷彿省略int()不會停止工作,但根據你應該在傳遞有理數的文檔)

+0

我的想法!但是,省略int()給了我一個TypeError:'float'對象不能被解釋爲2.6中的索引,並且TypeError:兩個參數都應該是2.7和3.2中的Rational Instances – Junuxx

1
>>> target = 10/math.pi 
>>> denominator = 16 
>>> fractions.Fraction(int(round(target*denominator)), denominator) 
Fraction(51, 16)