Wie kann man Zahlen mit Nachkommastellen in die Datehbank reibschreiben?
Ich habe an meinem Raspberry Pi einen Sensor der die Temperaturwerte ausliest. Ich habe ebenfalls MySQL installiert. Die "temperatur.py", die ich erstellt hab soll die Temperaturwerte alle 5 Minuten auslesen und in die Datenbank eintragen.
Ich hänge ein Screenshot mit dem code der Datei an!!
Mein Problem ist jetzt, dass die Werte nur gerundet in die Datenbank eingetragen werden, sie sollen aber mit Nachkommastellen eingetragen werden... Wie mache ich das?

2 Antworten
Wenn du Dein Prinzip beibehalten willst, musst Du statt "%.1f" "%f" schreiben. Ich rate allerdings, das Datum und die Temperatur in verschiedene Spalten der Datenbank zu schreiben. Datum = type String, Temperature = type float. Dazu muss man die Struktur der Datenbank entsprechend definieren. Die genaue Vorgehensweise zu beschreiben, führt hier zu weit.
Ich habe mal auf die Schnelle eine DB mit dem type 'float' erstellt. Kann dort beliebig lange Dezimalzahlen reinschreiben und rauslesen.
mögliche Fehlerursache :
- falscher Type in der DB (z.B. Integer)
- bei der Ausgabe der DB-Inhalte (linkes Fenster) werden Floats als Integer dargestellt.
Von welchem Typ ist die Spalte in der Tabelle? Sollte "decimal" oder "float" sein, je nach Anwendungsfall.
Ich glaube das war decimal, wo kann ich das nachgucken bzw. ändern? Und was muss ich stattdessen verwenden?
Nach Deinem Screenshot aus der Antwort weiter oben hat die Spalte wohl momentan den Typ integer.
Du kannst das ändern mit einem SQL-Befehl wie z.B.
ALTER TABLE test CHANGE daten daten DECIMAL(5,2) NOT NULL;
Dabei wäre dann natürlich bei "test" der Name Deiner Tabelle und bei "daten" der Name der Spalte zu benutzen.
DECIMAL(5,2) wäre jetzt nur ein Beispiel, hängt ganz davon ab, wie viele Vor- und Nachkommastellen Du brauchst. Bei Dir reicht vermutlich auch 4,2, wenn es nur um normale Umgebungstemperaturen geht bzw. 3,1 bei Umgebungstemperaturen und einer Nachkommastelle.
In der Tabelle werden die Messwerte mit 2 Nachkommastellen angezeigt.
Jetzt ist das problem, das der die werte nichtmehr in der DB reinschreibt... Wenn ich den float durch einen double ersetzen erkennt der diesen nicht ;(
temp_c = float(temp_string)/1000.0
wie kann ich das ändern??
So siehts jz aus:
SCHON GUT! Alles klar... der table war falsch ^^
in zeile 32-33 war der table fasch definiert, das sollte "(timestamp, daten)" heissen ...
Nochmals danke ;)
Sonnst vlt noch eine idee?
sieht jz so aus: der zeigt z.B. statt 24.1 jz 24.100000 an... in der DB keider keine veränderung...
so sieht's dann bei mir aus:
https://prnt.sc/gz90oi