2015-04-05 3 views
-2

Я просто хотел преобразовать десятичную дробь в дроби в Python. Я нашел несколько ответов здесь, в stackoverflow.Преобразование десятичных знаков в дроби в Python 3.4.2

How to convert a decimal number into fraction?

Я попробовал оба метода, но они не работали на 1.4 в качестве входных данных, хотя они работали на 0,25

+2

Не все реальные значения могут быть представлены с плавающей точкой. Оценка '(1.4) .as_integer_fraction()' даст вам '(3152519739159347, 2251799813685248)', который [довольно близок к 1.4] (https://www.wolframalpha.com/input/?i=3152519739159347+%2F+ 2251799813685248). Если вы хотите получить 100-процентную точность, вам придется избегать всплытия в целом и использовать десятичные знаки с самого начала. –

ответ

1
  1. Измените целое число на строку. Назовем это alpha
  2. Найдите length из alpha
  3. Создайте две пустые строки: beta и gamma
  4. Init for-loop от 0 до length
  5. Добавить все элементы в 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` 
    
  6. Conv ert gamma обратно в int и использовать функцию, которую вы нашли ранее.

  7. Преобразование beta назад в int и умножьте это на gamma.
  8. Добавьте это в кортеж из функции, которую вы опубликовали.

Все сделано!

Я написал это в , чтобы быстро продемонстрировать реализацию.

ПОЖАЛУЙСТА ЗАМЕТЬТЕ, ЧТО ЭТО НЕ СДЕЛАНО, КАК МЫ НЕ УПРОЩАЕМ ФРАКЦИЮ. ЭТО ТАКЖЕ НЕ ИСПОЛЬЗУЕТ ИЗОБРАЖЕНИЕ, КОТОРЫЙ Я ПЕРЕЧИСЛ ВЫШЕ ПОСЛЕДСТВИЯ ПРИЧИНЫ 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() 

 Смежные вопросы

  • Нет связанных вопросов^_^