8
votes

Python: eval () que les valeurs à virgule flottante contraint?

Est-il possible d'exécuter un eval code> -comme que ses valeurs contraint à virgule flottante? J'espère

eval('1/3')


2 commentaires

En Python ... Version ...?


ouvert aux méthodes dans n'importe quelle version de Python.


5 Réponses :


7
votes

question est vraiment: comment puis-je faire Python division à virgule flottante par défaut. La réponse est:

from __future__ import division


2 commentaires

En fait non, je le ferais alors si possible, sur juste pour l'évaluation de l'expression saisie. Mais, ne pas être en mesure de le faire, cela fonctionnera très bien. Merci!


Les paramètres __ sont par module afin que vous puissiez le faire dans un module séparé, mais Ignacio est meilleur.



14
votes

saisissez le drapeau du compilateur pour __ futur __. Division , transmettez-le et votre code à compile () , puis exécutez eval () sur le Objet de code retourné.

(note de MH) Cela a l'avantage supplémentaire de ne pas changer l'opération de division mondiale, ce qui pourrait avoir des effets secondaires inattendus. (fin de fin) xxx


4 commentaires

C'est parfait, exactement ce dont j'ai besoin. En particulier, cela ne change pas l'environnement mondial, ce qui pourrait éventuellement avoir des effets secondaires inattendus dans d'autres parties du programme. Je mettrai à jour votre exemple pour montrer explicitement l'importation et l'utilisation du drapeau du compilateur. Merci!!


Oh, c'est mignon, vient de voir ça. :-)


Puis-je limiter les endroits décimaux à deux?


@JIM: No.



3
votes

Le problème est qu'il n'y a pas de valeur de flotteur dans l'expression.

Essayez ceci eval ('1 / 3.0')


0 commentaires

3
votes

Ceci fonctionne par défaut sur Python3 xxx

pour python2, vous pouvez passer -qnew sur la ligne de commande (qui est équivalent à de la division d'importation __future__ xxx


0 commentaires

1
votes

basé sur la réponse de Lafada, si vous obtenez la chaîne d'entrée d'une variable: xxx


2 commentaires

Échouerait sur des expressions telles que string = (1/3) .


L'expression string = (1/3) ne crée pas de chaîne. Il calcule 1/3, produit un résultat entier de 0, puis stocke le résultat dans une variable appelée chaîne. Alors, alors eval (String + '. 0') tentera de concaténer le zéro entier avec une chaîne '. 0' . Cela fonctionnera si votre entrée est une chaîne réelle qui n'a pas été évaluée à un entier à l'avance.