Python读取非常小的十进制数

Python读取非常小的十进制数,python,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 thou

我的程序读取带有数字的文件并将其存储在数组中

一个值,比如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.
我将这些值存储在浮点数组中。 当我打印阵列时,X值在控制台上显示为1e-07 现在,当我把它存储到一个变量,比如说Y,然后用Y除以一个数字,我得到了被零除的误差

我想用这个数作为除数,因此为了避免被零除的错误,我想要的是实际值,而不是近似值

如何在Python中实现这一点?也就是说,在数组中正确读取并存储非常小的X值


注意:如果我使用十进制,我可以对整个数组执行此操作吗?或者只是为了这一个在同一个地方的值

正如你在笔记中提到的,我建议使用十进制模块。在这种情况下,一定要对所有值使用它。只是为了说明原因:

>>> 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'
>>从十进制输入十进制为D
>>>x=D(“.01”)
>>>0.3/x
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:不支持/:“float”和“decimal.decimal”的操作数类型

您需要使用Python十进制模块:您可以将其用于整个数组。关于如何使用它,请参见链接。:)

“现在当我读它时,它读作0.0”--我不确定我是否理解你的问题。你能澄清一下吗?即使发布一些我们可以用来重现问题的示例代码,也会有很大的帮助:)Python不可能“丢失”值,如果在一个上下文中是1e-07,那么在另一个上下文中它不会突然变为0.0。使用
Decimal
不会有帮助,你的问题在别处。仍然不够清楚。显示赋值为Y的行和给出除零误差的行。好的,非常好。现在,当您
打印repr(dataset2d[0][2])
时会发生什么?请注意我是如何将数字作为原始字符串读入十进制的。如果您不这样做,它会将该数字作为正常浮点读取,然后将近似值存储为十进制。谢谢。问题是我已经有很多关于浮点值的计算了。当我把它全部改成十进制时,我发现了一些错误…我正在研究它。。