- Измените целое число на строку. Назовем это
alpha
- Найдите
length
из alpha
- Создайте две пустые строки:
beta
и gamma
- Init
for-loop
от 0 до length
Добавить все элементы в alpha
к beta
пока .
найден
If a decimal is not found or only 0 (or any amounts of zeros), then your number is over `alpha` over 1.
If a decimal is found, start adding the elements to `gamma`
Conv ert gamma
обратно в int
и использовать функцию, которую вы нашли ранее.
- Преобразование
beta
назад в int
и умножьте это на gamma
.
- Добавьте это в кортеж из функции, которую вы опубликовали.
Все сделано!
Я написал это в python, чтобы быстро продемонстрировать реализацию.
ПОЖАЛУЙСТА ЗАМЕТЬТЕ, ЧТО ЭТО НЕ СДЕЛАНО, КАК МЫ НЕ УПРОЩАЕМ ФРАКЦИЮ. ЭТО ТАКЖЕ НЕ ИСПОЛЬЗУЕТ ИЗОБРАЖЕНИЕ, КОТОРЫЙ Я ПЕРЕЧИСЛ ВЫШЕ ПОСЛЕДСТВИЯ ПРИЧИНЫ paul manta ЗАЯВЛЕН.
Здесь я идти,
def findFraction(string):
from math import pow
length = len(string)
c = '{a}/{b}'.format(a=string, b=int(pow(10,length)))
print(c)
return c
def finishFraction(addToNumerator, currentFraction):
temp = ''
temp2 = ''
slashFlag = False
for i in range(0,len(currentFraction)):
if currentFraction[i]=='/':
slashFlag = True
elif slashFlag==True:
temp2 =temp2+currentFraction[i]
else:
temp = temp+currentFraction[i]
numerator = int(temp)+(int(addToNumerator)*int(temp2))
fraction = str(numerator)+'/'+str(temp2)
return fraction
def fractionForm(number):
alpha = str(number)
length = len(alpha)
beta = ''
gamma = ''
dotFlag = False
for i in range(0, length):
if alpha[i]=='.':
if dotFlag==True:
print("SHOULD NOT HAVE TWO DECIMALS IN NUMBER")
assert(False)
dotFlag=True
elif dotFlag==False:
beta=beta+alpha[i]
else:
gamma=gamma+alpha[i]
if gamma=='':
print('{a}/{b}'.format(a=int(beta),b=1))
return (int(beta),1)
else:
fraction = findFraction(gamma)
fraction = finishFraction(beta,fraction)
print(fraction)
return fraction
def test():
woooo = fractionForm(1.25)
woohoo= fractionForm(99.999)
dtest()
Не все реальные значения могут быть представлены с плавающей точкой. Оценка '(1.4) .as_integer_fraction()' даст вам '(3152519739159347, 2251799813685248)', который [довольно близок к 1.4] (https://www.wolframalpha.com/input/?i=3152519739159347+%2F+ 2251799813685248). Если вы хотите получить 100-процентную точность, вам придется избегать всплытия в целом и использовать десятичные знаки с самого начала. –