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.