2013-11-22 15 views
1

我的程序用數字讀取一個文件並將其存儲在一個數組中。Python讀取非常小的十進制數

一個值,即X爲0.0000001

dataset2d = [[float(digit) for digit in line.strip().split()] for line in file] 
Y= dataset2d[0][2] #(fixed position in file) 
C = 0.5 * math.log((A+ Y)/(B+ Y)) #This gives divide by zero error. B can be 0 though. 

我存儲在一個float數組中的值。 當我打印數組時,X值正在控制檯上顯示爲1e-07 現在,當我將它存儲到變量Y中,並用Y除數時,我得到的是除以0的錯誤。

我想用這個數字是除數,因此爲了避免除以零誤差,我想要的是實際值而不是近似值。

如何在Python中執行此操作?也就是說,在我的數組中正確讀取和存儲非常小的X值。

注意:如果我使用小數點,我可以爲整個數組做這個嗎?或者只是爲了這個在同一個地方的價值?

+3

「現在當我讀它時,它讀取爲0.0」 - 我不知道我明白你的問題。你能澄清嗎?即使發佈一些示例代碼,我們可以用來重現該問題將會有很長的路要走:) – mgilson

+0

您可以發佈一些代碼,瞭解您如何進行投射嗎? – rdodev

+1

http://docs.python.org/2/library/decimal.html – tjons

回答

-1

正如你在筆記中提到的,我會建議使用十進制模塊。在這種情況下,絕對使用它的所有值。只是爲了說明爲什麼:

>>> from decimal import Decimal as D 
>>> x = D(".01") 
>>> 0.3/x 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for /: 'float' and 'decimal.Decimal' 
+0

另請注意,我如何將原始字符串中的數字讀入小數點。如果你不這樣做,它會將該數字讀作普通浮點數*,然後將近似的[IEEE浮點數值](https://en.wikipedia.org/wiki/IEEE_floating_point)存儲爲十進制數。 – ubomb

1

您需要使用Python的十進制模塊:http://docs.python.org/2/library/decimal.html你可以用它爲您的整個陣列。至於如何使用它,請參閱鏈接。 :)

+0

謝謝。問題是我已經有了大量的浮點值計算。當我將其全部更改爲Decimal時,我收到錯誤...我正在調查它.. – user2441441