Что мне нужно сделать, так это использовать целочисленную арифметику для преобразования дробей в числа с плавающей запятой. Необходимое количество знаков после запятой указывается в виде переменной DECIMALS
. Каждая дробь содержится в кортеже целых чисел, например (1, 3)
. Первый элемент — числитель, второй — знаменатель. Кортежи содержатся в списке под названием fractions
.
Это мой код до сих пор:
fractions = [(1,7), (2,3), (22,7), (7001,7), (9,3), (611951,611953), (1,11), (1,7689585)]
DECIMALS = 10**40 # 40 decimal places
for fraction in fractions:
x = DECIMALS*fraction[0]/fraction[1]
print x
Когда я запускаю код, это то, что я получаю:
1428571428571428571428571428571428571428
6666666666666666666666666666666666666666
31428571428571428571428571428571428571428
10001428571428571428571428571428571428571428
30000000000000000000000000000000000000000
9999967317751526669531810449495304377950
909090909090909090909090909090909090909
1300460297922449651053990559958697
Проблема в том, что мне нужно отформатировать это в правильный десятичный формат. То, что я пробовал, было
print "0.%.40d" % (x)
Но, конечно, это поможет мне только с первыми двумя десятичными знаками; остальное будет неправильно. Я думал о том, чтобы разделить его, чтобы я мог вычислять дроби по отдельности, чтобы их было легче форматировать, но я понятия не имею, как это сделать. Загвоздка в том, что все дроби нужно обрабатывать одним и тем же кодом. Я также хочу, чтобы он был правильно округлен, но сейчас это не имеет большого значения.