2010-06-26 16 views
5

In IronPython esiste un modo per forzare l'espressione contenente valori integer da calcolare come virgola mobile. Per esempio, mi piacerebbe l'espressioneForzatura per eseguire calcoli in virgola mobile

1/3 

da valutare come

1./3. 

con il risultato 0,333 ...

Ho bisogno di questo per fare un semplice calcolatore di espressione di run-time all'interno di un progetto C# tramite IronPython. Non posso forzare gli utenti a inserire espressioni con punti decimali finali.

+0

Stai usando 'eval' su queste espressioni? (In caso contrario, è buono - è una sorta di modo non sicuro di implementare una calcolatrice) –

risposta

11

Si può forzare una divisione in virgola mobile come uno di questi, non importa se qualcosa è importata da __future__:

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

Ottimo! Questo è esattamente ciò di cui avevo bisogno. Purtroppo non posso contrassegnare tutte le risposte corrette come accettate. Quindi farò +1 a tutti e accetto questo. – Max

2

Se gli utenti immettono valori in ogni caso, presumibilmente si stanno convertendo i valori in int s. Quindi convertili semplicemente in float.

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

print 1/3 
print 1 // 3 
+0

Batti ad esso di circa un secondo. +1 – None

+0

Sto resistendo al downvote da quando hai ragione, ma il fatto che i Python abbiano deciso di cambiare la semantica di un operatore aritmetico di base dopo che così tante persone avevano già scritto così tanto codice - mi sembra ancora folle. Non so quanto IronPython tenga traccia della versione di Python, ma questa brutta sorpresa sta per accadere a molte persone che passano da Python 2 a Python 3. Molti calcoli con un comportamento di arrotondamento definito con precisione senza dubbio si interromperanno silenziosamente così le app di fiducia daranno risultati sbagliati. – Steve314

+0

@ Steve314: E? Python 3 non è certo nuovo. Se la documentazione di terze parti non è aggiornata, non c'è nulla che gli sviluppatori di Python possano fare al riguardo. –

Problemi correlati