zahl auf datentyp float checken

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
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

ich möchte in einer if anweisung überprüfen ob ein preis dem datentyp float entspricht.

like this pseudocode:

Code: Alles auswählen

if price is float():
           print "stimmt"
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

do it like this python code:

Code: Alles auswählen

isinstance(x, float)
Aber denke daran, dass solche Überprüfungen zu vermeiden sind und Duck Typing in Python heilig ist.
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

derdon hat geschrieben:do it like this python code:

Code: Alles auswählen

isinstance(x, float)
Aber denke daran, dass solche Überprüfungen zu vermeiden sind und Duck Typing in Python heilig ist.
hierbei werden zahlen wir 99.00 oder 3424.34 richtig erkannt, aber wenn ich 3,999.99 eingebe nicht

gibt es da noch eine spezielle lösung von python für geldbeträge??
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

PauleJS hat geschrieben:
derdon hat geschrieben:do it like this python code:

Code: Alles auswählen

isinstance(x, float)
Aber denke daran, dass solche Überprüfungen zu vermeiden sind und Duck Typing in Python heilig ist.
hierbei werden zahlen wir 99.00 oder 3424.34 richtig erkannt, aber wenn ich 3,999.99 eingebe nicht

gibt es da noch eine spezielle lösung von python für geldbeträge??
gibt isinstance(x, float) eigentlich ein true oder false zurück? in meiner if anweisung funktioniert diese nicht
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo

Code: Alles auswählen

>>> f = 1.10
>>> isinstance(f, float)
True
Gruß...busfahrer
Alles wird gut ;-)
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

busfahrer hat geschrieben:Hallo

Code: Alles auswählen

>>> f = 1.10
>>> isinstance(f, float)
True
Gruß...busfahrer

Code: Alles auswählen

class price(object):
     def set_price (self, value):
        print value
        if isinstance(value, float):
            print "richtig"
        else:
             print 'Error'

p = price()
p.set_price('22.39')
so gehts aber nicht
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

klar, du gibst ja auch einen String an und keine Float Zahl.

Sind dir die Datentypen in Python bekannt ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

Xynon1 hat geschrieben:klar, du gibst ja auch einen String an und keine Float Zahl.

Sind dir die Datentypen in Python bekannt ?
oja, bin zwar erst python anfänger aber das hätte ich sehen müssen ^^

wenn ich aber zb den betrag 200.00 eingebe wird dieser nur als 200.0 gespeichert, wie kann ich einfach festlegen das es immer 2 stellen nach den punkt geben soll, aber auch nicht mehr
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Geldeinheiten, kennt Python nicht, wäre auch Blödsinn, da diese nur in Ausgaben benötigt werden.
Aber wenn du eine Ausgabe zB per print machst, musst/kannst du die Zahl in einen String umwandeln und hier erst muss es wie Geld aussehen und dafür gibt es String Formats.
Hier der Link zur Doku: http://docs.python.org/library/string.h ... matstrings
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

PauleJS hat geschrieben:ich möchte in einer if anweisung überprüfen ob ein preis dem datentyp float entspricht.
Arbeite einfach mit dem Datentyp. Schau dir folgenden Code an:

Code: Alles auswählen

foo = float(1.23)
foo = float('2.34')
foo = float('abc')
Die ersten beiden Zeilen werden problemlos verarbeitet. Im dritten Fall bekommst du einen ValueError. Diesen Fehler kannst du abfangen und zwar entweder dort wo er entsteht oder auch irgendwo darüber in der Aufrufhierarchie. Schau dir mal Handling Exceptions im Tutorial an.

Zudem solltest du dir überlegen, ob es wirklich ein float sein muss. Es könnte ja auch ein Decimal sein und deine Verarbeitung würde immer noch funktionieren.
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

Xynon1 hat geschrieben:Geldeinheiten, kennt Python nicht, wäre auch Blödsinn, da diese nur in Ausgaben benötigt werden.
Aber wenn du eine Ausgabe zB per print machst, musst/kannst du die Zahl in einen String umwandeln und hier erst muss es wie Geld aussehen und dafür gibt es String Formats.
könnte/sollte ich das genauso für das format datum machen? sprich einfach als string speichern und bei der ausgabe format festlegen via string format?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

PauleJS hat geschrieben:wenn ich aber zb den betrag 200.00 eingebe wird dieser nur als 200.0 gespeichert, [...]
Es kann auch sein, dass er als 200.000000000000013 gespeichert wird und du es nur bei der Ausgabe nicht siehst. Gleitkommazahlen sind nicht präzise.

Unter http://www.python-forum.de/viewtopic.php?f=1&t=24787 findest du einen Thread zum Thema.
Zuletzt geändert von /me am Freitag 26. November 2010, 13:30, insgesamt 1-mal geändert.
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

/me hat geschrieben:
PauleJS hat geschrieben:ich möchte in einer if anweisung überprüfen ob ein preis dem datentyp float entspricht.
Arbeite einfach mit dem Datentyp. Schau dir folgenden Code an:

Code: Alles auswählen

foo = float(1.23)
foo = float('2.34')
foo = float('abc')
Die ersten beiden Zeilen werden problemlos verarbeitet. Im dritten Fall bekommst du einen ValueError. Diesen Fehler kannst du abfangen und zwar entweder dort wo er entsteht oder auch irgendwo darüber in der Aufrufhierarchie. Schau dir mal Handling Exceptions im Tutorial an.

Zudem solltest du dir überlegen, ob es wirklich ein float sein muss. Es könnte ja auch ein Decimal sein und deine Verarbeitung würde immer noch funktionieren.
gibt es denn einen unterschied bei der verarbeitung zwischen dec und float? float ist mir punkt und dec mit komma oder nicht?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

PauleJS hat geschrieben:gibt es denn einen unterschied bei der verarbeitung zwischen dec und float? float ist mir punkt und dec mit komma oder nicht?
Schau mal in mein Posting darüber. Kurz gesagt: Decimal ist präzise, float nicht.
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

/me hat geschrieben:
PauleJS hat geschrieben:gibt es denn einen unterschied bei der verarbeitung zwischen dec und float? float ist mir punkt und dec mit komma oder nicht?
Schau mal in mein Posting darüber. Kurz gesagt: Decimal ist präzise, float nicht.
ok verstehe!

dann werde ich doch lieber dec nutzen

danke!
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

bei dem datum hatte ich vor folgendermaßen zu machen

Code: Alles auswählen

import time
date = input('Date (m/dd/yyyy): ')
try:
  valid_date = time.strptime(date, '%m/%d/%Y')
except ValueError:
  print('Invalid date!')
ist das so sinnvoll?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Es gibt auch ein datetime Modul.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

PauleJS hat geschrieben:bei dem datum hatte ich vor folgendermaßen zu machen

Code: Alles auswählen

import time
date = input('Date (m/dd/yyyy): ')
try:
  valid_date = time.strptime(date, '%m/%d/%Y')
except ValueError:
  print('Invalid date!')
ist das so sinnvoll?
Nur wenn du Python3 benutzt.
PauleJS
User
Beiträge: 34
Registriert: Freitag 22. Oktober 2010, 14:58

stimmt datetime ist ja ein traum! super einfach

das wärs auch schon!

VIELEN DANK EUCH ALLEN
Antworten