Строка, представляющая число с плавающей точкой - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь обработать строку, подобную этой:

s = '1/2.05'

Когда я пытаюсь разобрать ее на дробь:

Fraction(s)

Я получаю:

ValueError: ("Invalid literal for Fraction: u'1/2.05'", u'occurred at index 3')

Я также пытался:

Fraction(s.split('/')[0], s.split('/')[1])

Но и с ошибкой:

TypeError: ('both arguments should be Rational instances', u'occurred at index 3')

Каким будет правильный разбор?

Спасибо всем заранее!

1 Ответ

0 голосов
/ 03 декабря 2018

Проблема заключается в том, что дроби и числа с плавающей запятой не смешиваются, и поэтому вы не можете вводить строку, которая прячет число с плавающей запятой напрямую.

Не используйте для этого eval.
Попробуйте решать числитель и знаменатель отдельно.(вы можете использовать float, но тогда точнее будет напрямую вызвать Fraction для строки, избегая проблем точности .)

from fractions import Fraction
s = '1/2.05'
numerator, denominator =  s.split('/')
result = Fraction(numerator)/Fraction(denominator)
print(result)
...