-
-
Erfahrener Benutzer
Robotik Einstein
Im Prinzip stimmt das was JoeBlack schreibt.
In C muss Du da allerdings ein wenig ausfpassen.
Die Berechnungen als INT müssen immer ohne Dezimalbrüche gemacht werden, weil die bei der Berechnung einfach abgeschnitten werden.
Also 9/10 ergibt 0 anstatt 0,9!
Die Werte müssen in Deinem Fall also 1000 mal größer sein ( 3 Nachkommastellen ) als das Ergebnis.
Die Reste können auch durch Eingabe eines "%" berechnet werden.
vorkomma=123456/1000; //Ergebnis 123;
nachkomma=123456%1000; //Ergebnis 456;
Setzt man das Ergebnis wieder zusammen gibt es noch ein Problem mit den ASCII Wandlungen, weil führende Nullen der Dezimalbrüche nicht eingetragen werden. Ob es da eine Möglichkeit für Deinen Compiler gibt die Leerstellenunterdrückung aufzuheben müsstest Du im Manual des Compilers nachlesen.
Wenn es die Möglichkeit nicht gibt, kann man es so machen:
Beispiel führende 0 en Einfügen
itoa(vorkomma,string);
strcpy(ausgabe,string);
strcatf(ausgabe,",");
itoa(nachkomma,string);
if(nachkomma<10){strcatf(ausgabe,"0");}
if(nachkomma<100){strcatf(ausgabe,"0");}
strcat(ausgabe,string);
Wenn Du mit signed Variablen arbeitest wird auch beim Teiler % das Minuszeichen mit übertragen und muß durch Multiplikation mit -1 wieder entfernt werden.
if(nachkomma<0){nachkomma*=-1;};
Sonst bekommst Du als Ergebnis -123,-456
Im klaren solltest Du Dir auch über die Wertebereiche von 16Bit (Integers) und 32 Bit (Long Intergers) sein.
Im übrigen sind 3 Nachkommastellen für einen 10Bit A/D Wandler ohnehin Luxus. Wirklich stimmen eigentlich nur 1 bis 2 Stellen nach dem Komma.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen