Hallo Forum,
ich brauche für mein µC - Projekt eine Möglichkeit float->char* zu
konvertieren. In der stdio.h gibt es ja z.B. sprintf, was aber mein C30
Compliler nicht bietet.
Es ist ja auch egal. Ich habe mir selbst ein Programm geschrieben,
welches mir die Konvertierung für beliebig viele Stellen macht.
Allerdings funktioniert es nicht immer korrekt. Wenn ich 0,015 in char
konvertiere, bekomme ich '0'',''0''1''4''9''9' heraus ? Viele andere
Zahlen gehen wieder wunderbar. Es gibt eben einige Ausnahme, wie z.B.
0,015 oder 0,01.
Vielleicht weiß jemand die Ursache ?
Hier der Code:
1 | #include <iostream>
|
2 | #include <string.h>
|
3 | #include <stdio.h>
|
4 | using namespace std;
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | float f=0.015; //zu konvertierende float Zahl
|
9 | int i=0;
|
10 | int j=0;
|
11 | int k=0;
|
12 | int NO=1;
|
13 |
|
14 | char c[10];
|
15 |
|
16 | if(f<0) //Vorzeichenkontrolle
|
17 | { c[i]='-';
|
18 | f*=-1;
|
19 | i++;
|
20 | }
|
21 | else
|
22 | {
|
23 | c[i]='+';
|
24 | i++;
|
25 | }
|
26 |
|
27 | while(1) //Zerlegung
|
28 | {
|
29 | if(f/10.0<1.0)
|
30 | {
|
31 | c[i]=(int)f%10+48; //Offset von 48 - ASCII
|
32 | i++;
|
33 | for(j=0;j<9;j++) //Komma bereits gesetzt ?
|
34 | {
|
35 | if(c[j]=='.') NO=0;
|
36 | }
|
37 | if(NO && k==0)
|
38 | {
|
39 | c[i]='.';
|
40 | i++;
|
41 | }
|
42 | if(k!=0)
|
43 | k--;
|
44 |
|
45 | f=f-((int)f%10);
|
46 | f*=10;
|
47 | }
|
48 |
|
49 | else
|
50 | {
|
51 | f/=10.0;
|
52 | k++;
|
53 | }
|
54 |
|
55 | if(i==8) break;
|
56 | }
|
57 |
|
58 | char* str = &c[0];
|
59 | cout<<"\n"<<c[0]<<c[1]<<c[2]<<c[3]<<c[4]<<c[5]<<c[6]<<c[7];
|
60 |
|
61 | cin>>f;
|
62 | return 0;
|
63 | }
|
Ich bin keiner, der effiziente Algorithmen programmiert, aber mein Code
funktioniert meistens :) Also bitte nicht aufregen, wenn ich es zu
umständlich mache oder den Wald vor lauter Bäumen übersehe.
MfG
Frank