2016-07-15 54 views
0

我目前使用的Python 2.7.5AIX 5.1 5.2 cx_Oracle版本錯誤的分頻輸出連接到Oracle 12c的cx_oracle給

我試圖執行一個SQL查詢,並把它的輸出使用csv模塊的csv文件。我的計算機運行的查詢是:

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

然而,在文件輸出爲:

0.015629999999999998,0.0038

當我希望它是

0.01563, 0.0038

經過一番研究,我相信這是因爲浮點數在二進制數2中表示。

但是我不知道如何解決這個問題?

我也試過

from __future__ import division 

但它並沒有幫助。

回答

0

函數ROUND是你的朋友

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

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

,或者在Python:

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

3.1416 
3.14159 
+0

你要知道,round'的'輸出也是一個二進制浮點數字,這也是不準確的,所以請務必方法轉換爲字符串(具有期望的精度),具有像'sprintf'或'to_char'這樣的函數,取決於給定的語言。 –

0

謝謝ZSIGMONDLőrinczy。 它的工作,通過使用TO_CHAR(ROUND())

>>> import cx_Oracle 
>>> con = cx_Oracle.connect(xxx/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')]