Pretypovani promene

Michal Grunt michal.grunt na vynet.cz
Středa Prosinec 29 21:50:47 CET 2010


Ještě doplnim (pokud to z prispevku nebylo jasne), ze pokud mam:

unsigned long frekvence;

frekvence = (unsigned long)((float)twPLL*(float)32.768*(float)0.25-225)
printf("%lu Khz",frekvence);

Je vse OK, akorat je zobrazovana (na LCD) frekvence v Khz. Ale rad bych, aby se mi frekvence zobrazovala v Mhz...

MG

From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Michal Grunt
Sent: Wednesday, December 29, 2010 9:43 PM
To: HW-news
Subject: Pretypovani promene

Zdravim,
Potreboval bych poradit ohledne pretypovani promene. Zkousel jsem vsechno mozne, ale nedari se (WinAVR, atmega32).

Mam nasledujici vzorec, kde vysledek je ve tvaru unsigned long:

(unsigned long)((float)twPLL*(float)32.768*(float)0.25-225)

To je v poradku, vrati se mi cislo 87500-108000 (radiova FM frekvence v Khz).

Ale potrebuji z toho udelat "Mhz", tedy deleno 1000 a toto koreknte vypsat. Tedy

printf("%.1f Mhz",frekvence); 

Pricemz frekvence je deklarovana:

double frekvence;

Ze zoufalosti uz jsem zkousel jsem ruzne pokusy, ale bud se mi ukaze nesmyslny udaj nebo nic...

frekvence=(double)((unsigned long)((float)twPLL*(float)32.768*(float)0.25-225))/1000);
frekvence=(double)((unsigned long)((float)twPLL*(float)32.768*(float)0.25-225))/(double)1000);
frekvence=(double)((unsigned long)((float)twPLL*(float)32.768*(float)0.25-225))/(double)1000.0);

Jak na to?

Diky
Michal Grunt


Další informace o konferenci Hw-list