Nachkommastellen abschneiden, aber nicht alle...

Hallöle.
Mal wieder ein kleines Problemchen:
Ich habe eine Zahl double x.
Diese bringt gewöhnlich zwei Nachkommastellen zustande.
Nun aber möchte ich nur eine haben. Wie stelle ichs an?

Der Trick:

x=x*10;
int y=x;
x=y/10;

bringt ausschliesslich int`s zu Werke...ich brauche aber eine Nachkommastelle.

mit fprint() ??

uwefed:
mit fprint() ??

Funktioniert auf dem Arduino nicht mit float. Außerdem hat man dann einen String den man wieder zurückwandeln müsste

Man muss nur statt einer Ganzzahl-Division durch eine Gleitkommazahl dividieren:

float x = 10.2569;
x = x * 10;
int i = x;
x = i / 10.0;

Oder kürzer:

float x = 10.2569;
x = ((int)(x*10)) / 10.0;

Rabenauge:
Ich habe eine Zahl double x.
Diese bringt gewöhnlich zwei Nachkommastellen zustande.
Nun aber möchte ich nur eine haben. Wie stelle ichs an?

Die Frage ergibt für mich keinerlei Sinn, da Gleitkommazahlen überhaupt keine feste Anzahl an Nachkommastellen haben.

Eine feste Anzahl an Nachkommastellen bekommt eine Gleitkommazahl erst dadurch, dass sie formatiert und ausgegeben wird.

Wie eine Gleitkommazahl mit einer festen Anzahl an Nachkommastellen ausgegeben und dabei formatiert werden kann, hängt von der zum Formatieren verwendeten Ausgabefunktion ab. Meinst Du vielleich die "print" Funktion so wie beispielsweise in "Serial.print"?

 float x=PI/2;
 Serial.println(x);   // ==> Standardausgabe mit 2 Nachkommastellen
 Serial.println(x,1); // ??> Ausgabe mit einer Nachkommastelle

Möchtest Du einfach so "formatiert und gerundet auf eine bestimmte Stellenzahl ausgeben"?
Oder möchtest Du die Zahl tatsächlich "runden" und dabei verändern?

Hm-du hast natürlich recht, es gibt keine festgelegte Anzahl der Kommastellen.
In meinem konkreten Problem allerdings schon:
Ich lese die MPU 6050 aus, und die Werte werden gekalman-filtert.
Da erhalte ich dann halt einen Wert, der genau zwei Nachkommastellen hat- nicht mehr und nicht weniger.
Bestimmt kann man die Kalman.h entsprechend anpassen aber ich rühre ungern in funktionierenden Bibliotheken herum, daher dieser “Umweg”…
Und nein: es geht absolut nicht um ne Ausgabe wie print oder so- sondern darum, dass ich mal versuchen möchte, meinen XYZWay etwas zu beruhigen, da der gefilterte Wert direkt in den PID-Regler gefüttert wird und ich mal schauen möchte, ob das wirklich auf zwei Nachkommastellen genau sein muss- ich hab den leisen Verdacht, da regelt sich was zu Tode…

Da erhalte ich dann halt einen Wert, der genau zwei Nachkommastellen hat- nicht mehr und nicht weniger.
Bestimmt kann man die Kalman.h entsprechend anpassen aber ich rühre ungern in funktionierenden Bibliotheken herum, daher dieser "Umweg"..

Glaub ich nicht.

Deine zwei Nachkommastellen kommen wohl von

double x = 1.23456;
Serial.print(x);  // ergibt 1.23

Und dass eine Regelung besser wird, wenn sie statt mit float ( = double ) mit Hüpfern von 0.1 °
(oder um welche Einheit geht es eigentlich?) arbeitet, glaub ich auch nicht.

Ich weiss noch nicht, ob die Regelei davon besser wird-aber ich halts durchaus für nen Versuch wert. Bin noch nicht zu gekommen, es zu probieren, aber falls es was bringt, wirst es im XYZWay-Thread zu lesen bekommen. :wink:
Falls nicht, auch...
Überlegung ist einfach die, dass die Regelung schon bei einem hundertstel Winkelgrad Abweichung loslegt- was ich für unnötig halte-so schnell kann man das Ding gar nicht umtreten.