Prevod float to char

Ahoj,
potrebuju prevest float na char a pak ho zobrazit na LCD za nokie 3310, ale nejak se me nedari. Tak davam priklad jak to delam a co me to ukaze:

unsigned char zobraz[8];
unsigned char zobraz1[8];
float test = 9.59;
unsigned char test2] = “9.59”;
itoa(test, zobraz,5);
sprintf(zobraz1,"%f", test);

LcdClear();
LcdGotoXYFont(1,1);
LcdStr(FONT_1X, test2 );
LcdGotoXYFont(1,2);
LcdStr(FONT_1X, zobraz);
LcdGotoXYFont(1,3);
LcdStr(FONT_1X, zobraz1);
LcdUpdate();

Vypis na displeji:
1.radek: 9.59
2.radek: 14
3.radek: ?

Ja uz nevim jak jinak bych to mel delat.

Dekuji za kazdou radu.

Cau, jelikoz mas “zobraz1” jako retezec znaku tak pro zobrazeni se zapisuje “%s” , “%f” je pro zobrazeni nedesetineho float

Funkce itoa() konvertuje číslo signed int na string. (integer to ascii)
Třetí argument je základ číselné soustavy, takže v příkladu by bylo číslo zobrazeno v pětkové soustavě.

Pro převod typu float použij funkci dtostrf().

[code]dtostrf (double hodnota, signed char min_šířka, unsigned char počet_desetinných_míst, char* string)

dtostrf(temp, 1, 2, zobraz);[/code]

Aby si překladač nestěžoval na nesprávný typ, deklaruj temp jako double.
Mezi typy float a double není v Avr-gcc rozdíl.

Tento příkaz je zapsaný správně, ale aby fungoval pro float , musely by se přidat určité argumenty v “Linker Options”. Je to ale neekonomické, protože kód extrémně naroste.
Mimochodem příkaz defaultně zobrazí 6 desetinných míst, takže string zobraz1[8] by mu byl příliš těsný.

Stringy deklaruj jako char

char zobraz[16];

abys se vyhnul varování.

Tak vyreseno.

Dekuji moc za vase rady :slight_smile:.