将长度为20的字符串转换为长度为20

时间:2016-08-17 20:57:42

标签: python python-3.x

我有一些内部数字的字符串,如' 0.9999965341102361'和' 3.465889763814134E-6'。我知道如何将它们转换为浮点值;但是,当我这样做时,它们变成9.99996534e-01和3.46588976e-06。如何在保持转换为浮点数的同时保留数字的全长?换句话说,我不想要取消原始号码。有没有办法做到这一点 - 我可以设置浮点长度等于20或什么?

自从我在学校实际上学习python以来已经有一段时间了,所以我可能会忘记一些相当明显的东西。

谢谢。

2 个答案:

答案 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