it-swarm.com.de

Wie bekomme ich Zahlen nach dem Komma?

Wie bekomme ich die Zahlen nach einem Dezimalpunkt?

Wenn ich beispielsweise 5.55 habe, wie bekomme ich .55?

Ein einfacher Ansatz für Sie:

number_dec = str(number-int(number))[1:]
20
lllluuukke
5.55 % 1

Beachten Sie, dass dies bei Rundungsproblemen mit Fließkommazahlen nicht helfen wird. Das heißt, Sie können erhalten:

0.550000000001

Oder ein wenig von den erwarteten 0,55.

140
jer

Verwenden Sie modf :

>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
112
Anthony V

Wie wäre es mit:

a = 1.3927278749291
b = a - int(a)

b
>> 0.39272787492910011

Oder mit numpy:

import numpy
a = 1.3927278749291
b = a - numpy.fix(a)
47
Jim Brissom

Wenn Sie das Modul decimal aus der Standardbibliothek verwenden, können Sie die ursprüngliche Genauigkeit beibehalten und Rundungsprobleme mit Gleitkommazahlen vermeiden:

>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')

Als kindallnotes in den Kommentaren müssen Sie zunächst native floats in Strings konvertieren.

31
intuited

Testen Sie Modulo:

5.55%1 = 0.54999999999999982
6
Juri Robl
import math
orig = 5.55
whole = math.floor(orig)    # whole = 5.0
frac = orig - whole         # frac = 0.55
4

Ähnlich wie die akzeptierte Antwort wäre ein noch einfacherer Ansatz mit Strings

if "." in str(number): # quick check if it is decimal
    number_dec = str(number).split(".")[1]

if 'e-' in str(number): # scientific notation
    number_dec = format(float(number_dec), '.%df'%(len(number_dec.split(".")[1].split("e-")[0])+int(number_dec.split('e-')[1])))
3
yosemite_k
import math

x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )

Es hat definitiv funktioniert

1
Ali

Beispiel:

import math
x = 5.55
print((math.floor(x*100)%100))

Das bedeutet, dass Sie zwei Zahlen hinter dem Dezimalpunkt erhalten, 55 aus diesem Beispiel. Wenn Sie eine Zahl benötigen, reduzieren Sie die obigen Berechnungen um 10 oder erhöhen sich je nach Anzahl der Nachkommastellen.

1
Frank

Verwenden Sie Floor und ziehen Sie das Ergebnis von der ursprünglichen Nummer ab:

>> import math #gives you floor.
>> t = 5.55 #Give a variable 5.55
>> x = math.floor(t) #floor returns t rounded down to 5..
>> z = t - x #z = 5.55 - 5 = 0.55
1
thyrgle
>>> n=5.55
>>> if "." in str(n):
...     print "."+str(n).split(".")[-1]
...
.55
1
ghostdog74

Dies ist eine Lösung, die ich ausprobiert habe:

num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
1
kurian

Manchmal sind nachfolgende Nullen von Bedeutung

In [4]: def split_float(x):
   ...:     '''split float into parts before and after the decimal'''
   ...:     before, after = str(x).split('.')
   ...:     return int(before), (int(after)*10 if len(after)==1 else int(after))
   ...: 
   ...: 

In [5]: split_float(105.10)
Out[5]: (105, 10)

In [6]: split_float(105.01)
Out[6]: (105, 1)

In [7]: split_float(105.12)
Out[7]: (105, 12)
1
George Fisher

Float-Nummern werden nicht im Dezimalformat (Base10) gespeichert. Lesen Sie die Python-Dokumentation durch, um sich zu überzeugen, warum. Daher ist es nicht ratsam, eine Base10-Darstellung von einem Float zu erhalten.

Jetzt gibt es Tools, mit denen numerische Daten im Dezimalformat gespeichert werden können. Unten sehen Sie ein Beispiel für die Verwendung der Decimal-Bibliothek.

from decimal import *

x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66'  # True

y = 0.341343214124443151466
str(y)[-2:] == '66'  # False
1
jpp

Möglicherweise möchten Sie Folgendes versuchen:

your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])

Es wird 0.55 zurückgegeben.

0
Ashkan Mirzaee
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)

ausgabe: 0,55

0
Sanchit Aluna

Wie wäre es mit:

a = 1.234
b = a - int(a)
length = len(str(a))

round(b, length-2)

Ausgabe:
print(b)
0.23399999999999999
round(b, length-2)
0.234

Da die Runde auf die Länge der Dezimalzeichenfolge ('0.234') gesendet wird, können wir einfach minus 2 eingeben, um die '0' nicht zu zählen und die gewünschte Anzahl von Dezimalpunkten zu ermitteln. Dies sollte in den meisten Fällen funktionieren, es sei denn, Sie haben viele Dezimalstellen und der Rundungsfehler bei der Berechnung von b beeinträchtigt den zweiten Parameter von round.

0
M H