2016-08-17 27 views
0

Ich habe einige Zeichenfolgen mit Zahlen wie '0.9999965341102361' und '3.465889763814134E-6'. Ich weiß, wie man sie in einen Gleitkommawert umwandelt; Wenn ich das tue, werden sie 9.99996534e-01 und 3.46588976e-06. Wie kann ich die ganze Länge der Nummer beibehalten, während ich noch in einen Float umwandele? Mit anderen Worten, ich möchte die ursprüngliche Zahl nicht abrunden müssen. Gibt es eine Möglichkeit, dies zu tun - kann ich die Float-Länge gleich 20 oder so einstellen?Konvertieren einer Zeichenfolge der Länge 20 in einen Float der Länge 20

Es ist schon eine Weile her, dass ich Python in der Schule genommen habe, also könnte ich etwas ziemlich Offensichtliches vergessen.

Vielen Dank.

+0

Diese Zahlen werden für mich nicht auf Python 3.5 gerundet – ForceBru

+1

Python 'float' Typ speichert 15 oder 16 signifikante Dezimalziffern. Wenn Sie mehr als das wollen, überprüfen Sie das 'decimal' Modul, das beliebig viele behandeln kann. –

Antwort

2

das Dezimalsystem Modul verwenden:

>>> 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.Decimal Objekte in einem numpy Array

>>> import decimal 
>>> import numpy as np 
>>> x = decimal.Decimal('0.9999965341102361') 
>>> y = decimal.Decimal('3.465889763814134E-6') 
>>> z = decimal.Decimal('1.23456789e-2') 
>>> 
>>> a = np.array((x, y, z)) 
>>> a 
array([Decimal('0.9999965341102361'), Decimal('0.000003465889763814134'), 
     Decimal('0.')], dtype=object) 
>>> 
>>> b = np.float64((x,y,z)) 
>>> b 
array([ 9.99996534e-01, 3.46588976e-06, 1.23456789e-02]) 
>>> b[2], a[2] 
>>> 
(0., Decimal('0.')) 
>>> 
>>> 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' 
>>> 

Sieht aus wie ein numpy Array von Typ Objekt Dezimal.Decimal-Objekte enthalten. Je nachdem, was Sie tun möchten, könnten sie funktionieren.

+0

Würde ein Dezimalformat in einem Array funktionieren? –

+0

@ A.W. - Nach welcher Art von Array fragen Sie? dezimal. Dezimalobjekte können in Container eingefügt werden - wie [Listen] (https://docs.python.org/3/faq/programming.html#how-do-you-make-an-array-in-python). Sie können alles in einen Container/eine Liste/ein Array einfügen. – wwii

+0

Ich benutze das NumPy-Array-System. –

1

Sie können nicht besser als Ihre Maschine float, die 64 Bit oder 32 Bit ist. Mein Linux-Laptop verfügt über 64-Bit-Wörter, und die Zahl erhalten ist:


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