繁体   English   中英

将长度为20的字符串转换为长度为20的浮点数

[英]Converting a string of length 20 into a float of length 20

我有一些带有数字的字符串,例如“ 0.9999965341102361”和“ 3.465889763814134E-6”。 我知道如何将它们转换为浮点值; 但是,当我这样做时,它们将变成9.99996534e-01和3.46588976e-06。 如何在仍转换为浮点数的同时保留数字的全长? 换句话说,我不想四舍五入原始数字。 有没有办法做到这一点-我可以将浮点长度设置为20左右吗?

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

谢谢。

使用十进制模块:

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

十进制.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'
>>> 

看起来像一个类型为object的numpy数组将保存十进制。十进制对象。 根据您要执行的操作,它们可能会起作用。

您不能比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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM