我有一些内部数字的字符串,如' 0.9999965341102361'和' 3.465889763814134E-6'。我知道如何将它们转换为浮点值;但是,当我这样做时,它们变成9.99996534e-01和3.46588976e-06。如何在保持转换为浮点数的同时保留数字的全长?换句话说,我不想要取消原始号码。有没有办法做到这一点 - 我可以设置浮点长度等于20或什么?
自从我在学校实际上学习python以来已经有一段时间了,所以我可能会忘记一些相当明显的东西。
谢谢。
答案 0 :(得分:2)
使用十进制模块:
>>> import decimal
>>>
>>> a = decimal.Decimal('0.9999965341102361')
>>> b = decimal.Decimal('3.465889763814134E-6')
>>> a
Decimal('0.9999965341102361')
>>> b
Decimal('0.000003465889763814134')
>>> a*10
Decimal('9.9999653411023610')
>>> b*10
Decimal('0.000034658897638141340')
>>> print(a)
0.9999965341102361
>>> print(b)
0.000003465889763814134
>>> print('{:1.20e}'.format(b))
3.46588976381413400000e-6
>>>
decimal.ncimal对象在numpy数组中
>>> import decimal
>>> import numpy as np
>>> x = decimal.Decimal('0.9999965341102361')
>>> y = decimal.Decimal('3.465889763814134E-6')
>>> z = decimal.Decimal('1.23456789012345678901e-2')
>>>
>>> a = np.array((x, y, z))
>>> a
array([Decimal('0.9999965341102361'), Decimal('0.000003465889763814134'),
Decimal('0.0123456789012345678901')], dtype=object)
>>>
>>> b = np.float64((x,y,z))
>>> b
array([ 9.99996534e-01, 3.46588976e-06, 1.23456789e-02])
>>> b[2], a[2]
>>>
(0.012345678901234568, Decimal('0.0123456789012345678901'))
>>>
>>> a*2
array([Decimal('1.9999930682204722'), Decimal('0.000006931779527628268'),
Decimal('0.0246913578024691357802')], dtype=object)
>>> b*2
array([ 1.99999307e+00, 6.93177953e-06, 2.46913578e-02])
>>>
>>> a*b
Traceback (most recent call last):
File "<pyshell#50>", line 1, in <module>
a*b
TypeError: unsupported operand type(s) for *: 'Decimal' and 'float'
>>>
看起来类型对象的numpy数组将包含decimal.Decimal对象。根据你想做的事情,他们可能会工作。
答案 1 :(得分:1)
你不能比机器浮动更好,这是64位或32位。我的linux笔记本电脑有64位字,并保留了这个数字:
In [6]: f = float('0.9999965341102361')
In [7]: f
Out[7]: 0.9999965341102361
In [8]: f2 = float('3.465889763814134E-6')
In [9]: f2
Out[9]: 3.465889763814134e-06