Python: eval (), который приводит значения к плавающей точке? - PullRequest
8 голосов
/ 23 февраля 2012

Есть ли способ выполнить eval -подобную функцию, которая приводит ее значения к плавающей точке? Я надеюсь

eval('1/3')

и возвращает значение с плавающей точкой .333333, а не целое значение 0.

Ответы [ 5 ]

15 голосов
/ 23 февраля 2012

Возьмите флаг компилятора для __future__.division, передайте его и ваш код в compile(), затем запустите eval() на возвращенном объекте кода.

. (примечание)

>>> import __future__
>>> eval(compile('1/3', '<string>', 'eval', __future__.division.compiler_flag))
0.33333333333333331
6 голосов
/ 23 февраля 2012

Вы действительно задаетесь вопросом: как я могу заставить Python выполнять деление с плавающей запятой по умолчанию.Ответ:

from __future__ import division
3 голосов
/ 23 февраля 2012

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

попробуйте eval('1/3.0')

2 голосов
/ 23 февраля 2012

Это работает по умолчанию на Python3

Python 3.2 (r32:88445, Dec  8 2011, 15:26:51) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> eval("1/3")
0.3333333333333333

Для Python2 вы можете передать -Qnew в командной строке (что эквивалентно from __future__ import division

$ python -Qnew
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> eval("1/3")
0.3333333333333333
1 голос
/ 26 апреля 2016

На основании ответа Lafada, если вы получаете входную строку из переменной:

>>> string = '1/3'
>>> print eval(string+'.0')
0.333333333333
...