2010-06-26 5 views
5

В IronPython существует какой-либо способ заставить выражение, содержащее целочисленные значения, вычисляться как с плавающей запятой. Например, я хотел бы выражениеФорсирование вычислений с плавающей запятой

1/3 

быть оценены как

1./3. 

с результатом 0,333 ...

Мне нужно это сделать простой бег времени выражение калькулятор в рамках проекта C# с помощью IronPython. Я не могу заставить пользователей вводить выражение с конечными десятичными точками.

+0

Вы используете 'eval' этих выражений? (Если нет, хорошо - это небезопасный способ реализовать калькулятор) –

ответ

11

Вы можете заставить деление с плавающей запятой, как любой из них, независимо от того, если что-то импортируется из __future__:

print val1/(val2 + 0.0) 
print (val1 + 0.0)/val2 
print float(val1)/val2 
print val1/float(val2) 
+0

Отлично! Это именно то, что мне нужно. К сожалению, я не могу отметить все правильные ответы, как принято. Поэтому я сделаю +1 всем и приму это. – Max

2

Если ваши пользователи все равно вводят значения, то, предположительно, вы преобразуете значения в int s. Поэтому просто преобразуйте их в float.

val1 = float(raw_input()) 
val2 = float(raw_input()) 
print val1/val2 
11
from __future__ import division 

print 1/3 
print 1 // 3 
+0

Ударьте меня к нему примерно через секунду. +1 – None

+0

Я сопротивляюсь нисходящему потоку, так как вы правы, но тот факт, что ребята из Python решили изменить семантику базового арифметического оператора после того, как многие люди уже написали столько кода - мне все равно кажется безумным. Я не знаю, насколько хорошо IronPython отслеживает версию Python, но этот неприятный сюрприз случится с большим количеством людей, когда они перейдут с Python 2 на Python 3. Множество вычислений с точно определенным управлением округлением, без сомнения, , поэтому надежные приложения будут давать неправильные результаты. – Steve314

+0

@ Steve314: И? Python 3 вряд ли новенький. Если сторонняя документация не обновляется, тогда разработчики Python ничего не смогут с этим поделать. –

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