2016-07-15 7 views
0

ich derzeit Python 2.7.5 auf Aix 5.1 mit cx_Oracle Version 5.2 bis zu Oracle verbinden bin mit 12ccx_Oracle gibt falschen Teilungsausgang

Ich versuche, eine SQL-Abfrage auszuführen, und legt seine Ausgabe in eine CSV-Datei mit dem Modul csv. Die Abfrage Ich betreibe ist:

Select 1.563/100, 0.38/100 from dual; - - simplified query 

jedoch die Ausgabe in Datei ist:

0.015629999999999998,0.0038

Als ich es

0,01563 sein erwarten, 0.0038

Nach ein paar Nachforschungen glaube ich, das liegt daran, dass Fließkommazahlen in binärer Basis 2 dargestellt werden.

Aber ich weiß nicht, wie das zu lösen?

Ich habe auch versucht

from __future__ import division 

Aber es half nicht.

Antwort

0

Funktion ROUND ist dein Freund

SELECT ROUND(3.1415926,4),ROUND(3.1415926,5) FROM DUAL; 

ROUND(3.1415926,4) ROUND(3.1415926,5) 
------------------ ------------------ 
      3.1416   3.14159 

oder in Python:

print round (3.1415926, 4) 
print round (3.1415926, 5) 

3.1416 
3.14159 
+0

Wohlgemerkt, die Ausgabe von 'round' ist eine andere binäre Gleitkommazahl, die auch ungenau ist, so dass die sichere Methode, um Zeichenfolge konvertiert (mit der gewünschten Genauigkeit) mit Funktionen wie 'sprintf' oder' to_char' abhängig von der jeweiligen Sprache. –

0

Danke Zsigmond Lőrinczy. Es funktionierte, indem ein to_char Fenster (rund())

>>> import cx_Oracle 
>>> con = cx_Oracle.connect(xxx/[email protected]) 
>>> cur = con.cursor() 
>>> cur.execute("select 1.563/100, round(1.563/100,5), to_char(round(1.563/100,5))   from dual") 
>>> l_result = cur.fetchall() 
>>> l_result 
[(0.015629999999999998, 0.015629999999999998, '0.01563')] 
Verwandte Themen