dezimaltrennzeichen hinzufuegen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pyront
User
Beiträge: 22
Registriert: Donnerstag 28. Juni 2018, 16:04

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
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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
Zuletzt geändert von ThomasL am Donnerstag 28. Juni 2018, 16:49, insgesamt 1-mal geändert.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@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.
pyront
User
Beiträge: 22
Registriert: Donnerstag 28. Juni 2018, 16:04

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 !
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten