Hallo zusammen
Ich habe ein Problem beim runden und finde die Ursache nicht
Ich lese aus einer Excel Tabelle Messwerte ein
Beim einlesen kommt z.B. 3x hintereinander der Wert 19.8999996185303
Nun möchte ich diese Werte auf 2 Kommastellen runden
wert = float(wert_von_excel)
wert_round = round(wert, 2)
print(wert_round)
2x erhalte ich richtig 19.9
Beim 3. Mal lautet das Ergebnis allerdings 20.0, was falsch ist.
Kann mir jemand von Euch erklären, was die Ursache ist?
Gruss
Thomas
Problem beim Runden
Werte in Excel Tabelle
Zeit Wert
240 19.89999962
270 19.89999962
300 19.89999962
Ausgabe Print
Zeit: 240 --- Wert: 19.89999961853027
19.89999961853027
19.9
Zeit: 270 --- Wert: 19.89999961853027
19.89999961853027
19.9
Zeit: 300 --- Wert: 19.89999961853027
20.0
Zeit Wert
240 19.89999962
270 19.89999962
300 19.89999962
Ausgabe Print
Zeit: 240 --- Wert: 19.89999961853027
19.89999961853027
19.9
Zeit: 270 --- Wert: 19.89999961853027
19.89999961853027
19.9
Zeit: 300 --- Wert: 19.89999961853027
20.0
wb = load_workbook(file)
ws = wb.active
for row in ws:
index += 1
zeit = ws.cell(index, 1)
wert = ws.cell(index, 2)
try:
temp = float(wert.value)
print(temp)
wert_round = round(temp, 2)
print(wert_round)
x.append(zeit.value)
y.append(wert.value)
print("Zeit:",zeit.value, " --- Wert:", wert.value)
except:
print("String")
ws = wb.active
for row in ws:
index += 1
zeit = ws.cell(index, 1)
wert = ws.cell(index, 2)
try:
temp = float(wert.value)
print(temp)
wert_round = round(temp, 2)
print(wert_round)
x.append(zeit.value)
y.append(wert.value)
print("Zeit:",zeit.value, " --- Wert:", wert.value)
except:
print("String")
Nackte Excepts verwendet man nie. Fange nur die Exceptions, die du erwartest. Deshalb habe ich die hier raus genommen.
Code hier im Forum kommt zwischen Code-Tags, damit die Einrückung erhalten bleibt. Code-Tags werden eingefügt, wenn du den </>-Button im "vollständigen Editor" klickst.
Du gibst gar nicht aus, was du rundest, sondern die Ursprungswerte.
Was ist die Ausgabe hiervon?
Womöglich wolltest du auch die Exception fangen, wenn der Wert nicht in einen float konvertiert werden kann.
In dem Fall:
Code hier im Forum kommt zwischen Code-Tags, damit die Einrückung erhalten bleibt. Code-Tags werden eingefügt, wenn du den </>-Button im "vollständigen Editor" klickst.
Du gibst gar nicht aus, was du rundest, sondern die Ursprungswerte.
Was ist die Ausgabe hiervon?
Code: Alles auswählen
wb = load_workbook(file)
ws = wb.active
for row in ws:
index += 1
zeit = ws.cell(index, 1)
wert = float(ws.cell(index, 2))
rounded = round(wert, 2)
print(f"zeit: {repr(zeit)} - wert: {repr(wert)} - gerundet: {repr(rounded)}")
Womöglich wolltest du auch die Exception fangen, wenn der Wert nicht in einen float konvertiert werden kann.
In dem Fall:
Code: Alles auswählen
wb = load_workbook(file)
ws = wb.active
for row in ws:
index += 1
zeit = ws.cell(index, 1)
try:
wert = float(ws.cell(index, 2))
except ValueError:
wert = None
if wert:
rounded = round(wert, 2)
print(f"zeit: {repr(zeit)} - wert: {repr(wert)} - gerundet: {repr(rounded)}")
Vielen Dank
Vor lauter Bäumen sieht man manchmal den Wald nicht.
Aus Grund Deiner Nachfrage habe ich gemerkt, dass die print Ausgaben versetzt waren.
Auch Deine Tipps für mich als Anfänger waren sehr hilfreich
Gruss
Thomas
Vor lauter Bäumen sieht man manchmal den Wald nicht.
Aus Grund Deiner Nachfrage habe ich gemerkt, dass die print Ausgaben versetzt waren.
Auch Deine Tipps für mich als Anfänger waren sehr hilfreich
Gruss
Thomas