Convertir la fraction en flotteur?
Genre de comme cette questionmais dans le sens inverse.
Donné une chaîne de caractères comme 1
1/2
ou 1 2/3
quelle est la meilleure façon de le convertir en un float? Je suis en train de réfléchir à l'aide de regexes au cas par cas, mais peut-être que quelqu'un connaît une meilleure façon, ou d'une pré-solution existante. J'espérais que je pourrais simplement utiliser eval
mais je pense que le 3ème cas l'en empêche.
source d'informationauteur mpen | 2009-11-27
Vous devez vous connecter pour publier un commentaire.
peut-être quelque chose comme ceci (2.6+)
J'ai modifié James répondre un peu.
http://ideone.com/ItifKv
Bien que vous devriez tsar clair de eval complètement. Peut-être certains version plus raffinée de:
Désolé, destiné à être num.split s pas.split, et jette. Édité.
Je vois, il y a déjà plusieurs bonnes réponses ici, mais j'ai eu de la chance avec cette. Il a également l'avantage qu'il tolère les non-fraction des chaînes si vous êtes l'analyse mixte des ensembles de données, il n'ya donc pas besoin de vérifier si c'est une fraction de la chaîne ou non à l'avance.
Qui pourrait être un sale solution de contournement, mais vous pouvez convertir les espaces en un
+
signe de résoudre le 3ème cas (ou à un-
si votre fraction est négatif).Il peut également gérer "2 1/1e-8", "-1/3" et "1/5e3".
Cette mise en œuvre permet d'éviter d'utiliser eval et travaille sur les pré-versions 2.6 de Python.
À tester:
En fonction de ce que la syntaxe que vous voulez prendre en charge pour votre fractions,
eval('+'.join(s.split()))
(avec de la vraie division en place -- c'est à dire, Python 3 oufrom __future__ import division
en Python 2, force de travail. Il serait de couvrir tous les cas que vous citez, en particulier.