2009-12-16 47 views
1

MySQLdb做了一些奇怪的事情,它似乎總是返回一個Decimal對象,其中2個有效數字比除法運算的分子更高。控制MySQLdb中的十進制除法精度

如果分母是比較大的,這意味着有時結果被截斷爲零:

>>> import MySQLdb 
>>> db = MySQLdb.connect(.....) 
>>> c = db.cursor(); 
>>> c.execute("select 1000/ 20990933630") 
1L 
>>> c.fetchall() 
((Decimal("0.0000"),),) 
>>> c.execute("select 1000.0000000000000000000000/ 20990933630") 
1L 
>>> c.fetchall() 
((Decimal("4.763961516084313397E-8"),),) 
>>> c.execute("select (1000 + 0.000000000000000000000)/20990933630") 
1L 
>>> c.fetchall() 
((Decimal("4.76396151608431340E-8"),),) 

我可以強制浮師?有沒有一種更優雅的方式比添加0.0000000000一切?

回答

3

您可以更改div_precision_increment變量。它默認爲4

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_div_precision_increment

下面是一個使用您的部門爲例:

mysql> select 1000/ 20990933630; 
+-------------------+ 
| 1000/ 20990933630 | 
+-------------------+ 
|   0.0000 | 
+-------------------+ 
1 row in set (0.00 sec) 

mysql> set local div_precision_increment = 30; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select 1000/ 20990933630; 
+----------------------------------+ 
| 1000/ 20990933630    | 
+----------------------------------+ 
| 0.000000047639615160843133969739 | 
+----------------------------------+ 
1 row in set (0.00 sec) 

mysql>