Hallo, ich habe ein seltsames Problem beim Umwandeln von Zahlen in
Strings.
Da ich Festkommarithmetik verwende, benötige ich zum Umwandeln von
meinen Festkommazahlen die Funktion my_itoa() und zusätzlich noch
formatNumber(). Diese habe ich mal irgenwo hier oder im Roboternetz
gefunden.
Hier die Funktion my_itoa():
1 | void my_itoa(int16_t zahl, char* string) {
|
2 | uint8_t i;
|
3 |
|
4 | string[6]='\0'; // String Terminator
|
5 | if( zahl < 0 ) { // ist die Zahl negativ?
|
6 | string[0] = '-';
|
7 | zahl = -zahl;
|
8 | }
|
9 | else string[0] = '0'; // Zahl ist positiv
|
10 |
|
11 | for(i=5; i>=1; i--) {
|
12 | string[i]=(zahl % 10) +'0'; // Modulo rechnen, dann den ASCII-Code von '0' addieren
|
13 | zahl /= 10;
|
14 | }
|
15 | }
|
und hier die Funktion formatNumber()
1 | void formatNumber(char* inputString, char* outputString, uint8_t komma, uint8_t frac) {
|
2 |
|
3 | uint8_t i = 0; // Zähler
|
4 | uint8_t j = 0; // Zähler 2
|
5 | uint8_t flag=0; // Merker für führende Nullen
|
6 |
|
7 | // Vorkommastellen ohne führende Nullen ausgeben
|
8 | for(; i<komma; i++)
|
9 | {
|
10 | if (flag==1 || inputString[i]!='0')
|
11 | {
|
12 | if (flag==0 && inputString[0]=='-')
|
13 | {
|
14 | outputString[0] = '-'; // negatives Vorzeichen ausgeben
|
15 | j++;
|
16 | }
|
17 | outputString[j] = inputString[i];
|
18 | j++;
|
19 | flag = 1;
|
20 | }
|
21 | }
|
22 |
|
23 | outputString[j] = ','; // Komma ausgeben
|
24 |
|
25 | // Nachkommastellen ausgeben
|
26 | for(; i<(komma+frac); i++)
|
27 | {
|
28 | j++;
|
29 | outputString[j] = inputString[i];
|
30 | }
|
31 |
|
32 | j++;
|
33 | outputString[j] = '\0';
|
34 | }
|
Mein Problem ist nun folgendes:
Wenn ich die Funktionen in dieser Reihenfolge aufrufe, z.B.:
1 | my_itoa(volt, UARTTemp);
|
2 | formatNumber(UARTTemp, voltT, 4, 2);
|
3 |
|
4 | my_itoa(baro, UARTTemp);
|
5 | formatNumber(UARTTemp, baroT, 5, 1);
|
6 |
|
7 | utoa(hell, hellT, 10);
|
dann habe ich bei dem String voltT keine Probleme. Dieser ist dann z.B.
12,45, aber beim String baroT kommt dann soetwas wie 1017,1225 heraus,
wobei das "225" der Wert von hell ist.
Ich kann mir leider weder erklären woran das liegt, noch wie ich dieses
Problem beheben soll.
Aber ich möchte sowieso andere Funktionen für die Umwandlung von
Gleitkomma in String verwenden, bzw. nur eine Funktion, aber ich bin mir
immer zu faul, mir eine passende Funktion zu schreiben.
Die von mir verwendeten Funktionen müssen ja führende Nullen haben, da
ansonsten das Ergebnis nicht stimmt, sonst könnte ich statt my_itoa() ja
auch itoa() verwenden.
Wäre für jegliche Hilfe dankbar!