Seite 1 von 1

dezimaltrennzeichen hinzufuegen

Verfasst: Donnerstag 28. Juni 2018, 16:25
von pyront
Hallo Gemeinde


ich wuerde gerne zahlen ein dezimaltrenneichen hinzufuegen.
Als beispiel habe ich die zahl 11110001 und moechte nun an der 4 stelle von hinten den dezimalpunkt hinzufuegen 1111.0001
oder ich habe die zahl 23 und moechte die zahl 0.0023

ich bin noch anfaenger und tue mich etwas schwer, so wie es fuer mich aussieht scheint python probleme mit der direkten veraenderung der variablen zu haben.
Also gehe ich gerade folgenden weg..

ich wandel die zahl zu einem string. und fuege jeden einzelnen buchstaben einem array,liste zu.
dann koennte ich ev im array,liste an der stelle den punkt setzten und das array,liste wieder zusammenfuegen und zim float umwandeln.

Code: Alles auswählen

f = []
amount = "3134423"

stringkredslaenge = len(str(amount))
for  i in range(0, stringkredslaenge):
    f.append(amount[i])
    print(amount[i])
print(f)

Ausgabe =

Code: Alles auswählen

3
1
3
4
4
2
3
['3', '1', '3', '4', '4', '2', '3']
aber irgentwie erscheint mir der ganze weg als falsch. leider finde bei meiner suche nur das problem "," zu "."

naja ich wuerd mich ueber hilfe ideen vorschlaege freuen

mfg

Re: dezimaltrennzeichen hinzufuegen

Verfasst: Donnerstag 28. Juni 2018, 16:40
von ThomasL

Code: Alles auswählen

zahl = "12345678"
stelle = 4

# diese Zeile funktioniert mit Python >= 3.6
zahl_mit_punkt = f"{zahl[:stelle]}.{zahl[stelle:]}"

# diese Zeile funktioniert mit Python <3.6
zahl_mit_punkt = "{}.{}".format(zahl[:stelle], zahl[stelle:])

print(float(zahl_mit_punkt))
1234.5678
Edit:
dieser Code funzt natürlich nur wenn der String mehr Ziffern hat, als in der Variable stelle definiert.
zahl = "34" und stelle = 4 geht also nicht

der Sinn des Ganzen entzieht sich mir jedoch ein wenig

Re: dezimaltrennzeichen hinzufuegen

Verfasst: Donnerstag 28. Juni 2018, 16:40
von __blackjack__
Ich bin gerade sehr verwirrt was Du eigentlich machen willst. Kann es sein das Du die Zahl einfach nur durch 10000 teilen möchtest?

Code: Alles auswählen

In [1]: 11110001 / 10000.
Out[1]: 1111.0001

In [2]: 23 / 10000.
Out[2]: 0.0023

Re: dezimaltrennzeichen hinzufuegen

Verfasst: Donnerstag 28. Juni 2018, 17:41
von kbr
@pyront: Du willst vermutlich das, worauf __blackjack__ bereits hingewiesen hat. Das 'eigenartige' Verhalten Deines Programms rührt daher, dass 'amount' bereits ein String ist. Falls das kein Fehler ist, so kannst Du daraus eine Fließkommazahl mit vier Nachkommastellen erzeugen

Code: Alles auswählen

>>> amount = "3134423"
>>> float(amount)/1e4
313.4423
was Du natürlich auch wieder in einen String konvertieren kannst. Vielleicht möchtest Du auch Deinen Anwendungsfall vorstellen, da die Aufgabe etwas ungewöhnlich scheint.

Re: dezimaltrennzeichen hinzufuegen

Verfasst: Donnerstag 28. Juni 2018, 19:55
von pyront
Dank euch fuer die antworten inkl loesungen. (ich find kein erledigt button)

oje .... das tut weh, aber so richtig .....

geteilt durch 1000 ja .... genau das habe ich gesucht....
ich komm mir gerade sowas von bloed vor xD. immerhin kam mir mein weg falsch genug vor um ihn nicht zu beenden.
ich war so fixiert einen punkt einzufuegen, dass ich garnicht dran gedacht hab ihn zu errechnen.

der sinn ist einfach ich bekomm zb den value 23 geliefert aber real ist es halt 0.0023 und ich will mit den realen werten weiterrechnen.
und es sind verschiedene prezisionen 2,3,4,5... die alle zusammen gezaehlt werden

naja Dank euch nochmal !

Re: dezimaltrennzeichen hinzufuegen

Verfasst: Freitag 29. Juni 2018, 08:53
von DeaD_EyE
Bei float kann dir folgendes passieren:

Code: Alles auswählen

In [1]: .1 + .2
Out[1]: 0.30000000000000004
Aufgrund der Repräsentation einer Gleitkommazahl, können nicht alle Dezimalbrüche abgebildet werden.
Für das meiste was wir machen, ist das genau genug. Wenn du irgendwas im Finanzwesen machen willst,
sind floats sehr ungünstig (decimal.Decimal).

Ansonsten versuche immer Zahlen als das zu behandeln, was sie sind.
Ich hab das jetzt schon öfters erlebt, dass man versucht die Zahl als string zu bearbeiten und dann wieder in eine Zahl umzuwandeln.
Du bist nicht der erste und letzte, der das versucht.