Hallo, wie kann ich aus einem String möglichst einfach einen Fixed Point machen? Die letzten 3 Stellen der Zahl sollen die Dezimalstellen darstellen. z.b habe ich char a[10]= "123,456"; double d; will jetzt, dass in dem d 123456 steht oder wenn der string "-11,1" ist, dass dann d-11100 ist mir fallen da nur umständliche lösungen ein komma suchen, ende suchen zahlen vor dem komma *1000 zahlen nach dem komme wenn betrag kleiner 100 mal 10 wenn kleiner 10 mal 100 ergebnis = vordemkomma+nachdemkomma wenn >0 oder - wenn kleiner 0 geht das auch einfacher??? Danke schon mal
phreak schrieb: > Hallo, wie kann ich aus einem String möglichst einfach einen Fixed Point > machen? Die letzten 3 Stellen der Zahl sollen die Dezimalstellen > darstellen. > > z.b habe ich > char a[10]= "123,456"; > double d; Fixed Point und 'double' beissen sich aber. Genau deswegen macht man ja Fixed Point, damit man eben keine Gleitkommaarithmetik braucht. > mir fallen da nur umständliche lösungen ein > komma suchen, komma suchen klingt erst mal gut > ende suchen > zahlen vor dem komma *1000 > zahlen nach dem komme wenn betrag kleiner 100 mal 10 > wenn kleiner 10 mal 100 Aber warum so umständlich weiter? Komma aus dem String rauswerfen. Von der ursrprünglichen Kommaposition ausgehend noch die nächsten 3 Character mit dazu nehmen, fals sie existeieren. Wenn sie nicht existieren, dann ein '0' Character anhängen. Und ab mit diesem String durch atoi oder atol oder welche Funktion du auch immer nimmst um die Zahl in einen Integer (int oder long) umzuwandeln. Alternativ kann man auch die Umwandlung selber machen, und dann einfach ab Auftreten eines Kommas noch maximal 3 Stellen durch die Umwandlung schleusen. eine normale String to Long Umwandlung sieht so aus
1 | long toLong( const char* s ) |
2 | {
|
3 | long result = 0; |
4 | uint8_t sign = 0; |
5 | |
6 | if( *s == '-' ) { |
7 | sign = -1; |
8 | s++; |
9 | }
|
10 | |
11 | while( *s >= '0' && *s <= '9' ) |
12 | result = 10 * result + ( *s++ - '0' ); |
13 | |
14 | if( sign ) |
15 | result = -result; |
16 | |
17 | return result; |
18 | }
|
Da jetzt noch eine Erkennung des Kommas nach der while Schleife mit rein und noch 3 Character aus dem String mitnehmen (sofern sie exisitieren) und fertig ist die Laube.
super danke, dachte mir schon dass ich kompliziert denke, werde es jetzt so machen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.