2012-06-29 3 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, то вы можете (и должны) просто сказать (без stringifying вашей цели число, конечно):.

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

(это выглядит, эмпирически, как если бы опуская int() не останавливает его работу, но в соответствии с Документами вы должны пройти рациональные числа в)

+0

Мои мысли точно! Однако исключение 'int()' дает мне объект TypeError: 'float' не может быть интерпретирован как индекс 'в 2.6, а' TypeError: оба аргумента должны быть Rational Instances' в 2.7 и 3.2 – Junuxx

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