Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 3.321 pregleda

Najnovija ↓

skracivanje float na dve decimale na lcd-u 31.08.2014. u 09:30 · pre 148 meseci
izmenjeno 1 put, poslednji put mst.petrovic 31.08.2014. u 11:26
  1. mst.petrovic31.08.2014. u 11:26zapis iz teksta poruke
#1
pozdarv svima,
imam problem koji je mozda vama smesan ali meni nije...
Kako da promenljivu tipa float koju lcd prikazuje kao 3.499999 prikazem kao 3.49 (nebitno mi je zaokruzivanje). Koristim mikro C.
unapred hvala!!!
Potpis
mst
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 11:30 · pre 148 meseci #2
Code:

float x;

...
x = (float)((int)x*100) / 100.0F; //x je sad zaokruzena na 2 decimale
...



proveri da li mikroC printf ima mogucnost da formatira float izlaz
u normalnom C-u mozes da uradis

Code:

printf("%.2f\n", x);


i on ce ti prikazati samo 2 decimale
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 11:36 · pre 148 meseci #3
Bogdane,
hvala ti na odgovoru, od tebe sam ga i ocekivao... :D!!!

jedini problem je sto printf ne mogu da napisem u mikroc-u.
Potpis
mst
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 12:09 · pre 148 meseci #5
Bogdane,
evo ga deo koda koji je sporan. i dalje nece da radi... posle ovoga meni izbaci samo broj 3

Code:

char *value_pd="000";
float pdp=3.5,pdps=0;
/************************ovo je deo rutine za menjanje vrednosti enkodera 

if(count1>7)
            {
              pdp=pdp+0.1;                  // uvecaj za 0.1
              count1=6;
            }
             if(count1<5)
            {
              pdp=pdp-0.1;                  // umanii za 0.1
              count1=6;
            }
/*****************************

pdps = (float)((int)pdp*100) / 100.0F; //x je sad zaokruzena na 2 decimale
FloatToStr(pdps,value_pd);
Lcd_out(3,10,value_pd );

Potpis
mst
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 13:00 · pre 148 meseci #10
mikroC je tu bas $%#@%@!#$ ... sta da ti kazem ... moraces onda malo drugacije

Code:


int TEMP;

char *value_pd="000";
float pdp=3.5,pdps=0;
/************************ovo je deo rutine za menjanje vrednosti enkodera 

if(count1>7)
            {
              pdp=pdp+0.1;                  // uvecaj za 0.1
              count1=6;
            }
             if(count1<5)
            {
              pdp=pdp-0.1;                  // umanii za 0.1
              count1=6;
            }
/*****************************


TEMP = pdp*100;
pdps = TEMP / 100.0F;
FloatToStr(pdps,value_pd);
Lcd_out(3,10,value_pd );
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 13:02 · pre 148 meseci #11
btw float je uzasno spor i uzima uzasno mnogo flash-a .. posebno kod mikroC koji to radi prilicno "nogama" .. razmisli da sta god tu radis predjes u int racunicu ..
izracunas u odnosu na to sto radis kolika ti je tacnost potrebna i sve racunas sa intovima * neka vrednost .. ja na primer za temperaturu gde mi je 2 decimale dovoljna tacnost racunam sve u *1000 .. imas full int math koji je extra brz i trosi nista flash-a i samo krajnje vrednosti koristis tako sto znas da su *1000 u odnosu na pravu vrednost ..
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 13:08 · pre 148 meseci #12
ok,
mislim da si u pravu... imao sam to resenje na pocetku ali sam hteo da ga resim preko floata... izgleda da sam mnogo tvrdoglav... vracam se na int
hvala puno!!!
Potpis
mst
Re: skracivanje float na dve decimale na lcd-u 31.08.2014. u 13:17 · pre 148 meseci #13
float je super ako ga podrzava mcu. softwerska float implementacija nije
problem, poznata je i prezvakana mnogo puta, biblioteke su free i vecina
kompajlera ih koristi as-is, problem je sto tu nema nikakve optimizacije
i to je na samom kompajleru da odradi, mikroC to ne ume .. (nije ni XC8
nista bolji po tom pitanju, ali bar ime da isparsira onu liniju kako
treba). e sad, nekad ti je neophodan full float support i u tom slucaju
zagrizes i iskoristis isti ali najcesce ti ne treba float i onda je
bolje da ga samo izsimuliras.. kod mikroC je jos posebno smor sto on ne
ume da izbaci delove koda koji se ne koriste tako da i malo koristenje
float-a uvuce celu ieee754 biblioteku .. no ako se dobro secam jos su je
nesto oni budzili pa zapis nije ieee754 vec "malo" drugaciji .. ne znam
sta bi ti rekao, mnogo mi je draga ta firma ali mi taj kompajler ide na
ganglije sve vise kako prolazi vreme ... mcp je isto smorio sa xc8 a
izgleda su u novijim verzijama upropastili i xc16 i xc32 .. sva sreca da
sam na vreme pobegao skroz sa pic platforme .. sto se kompajlera tice
atmel je milion puta bolji/otvoreniji .. sad jbg ja i dalje mislim da je
mcp zgodniji sto se hw-a i dostupnosti tice ... mrka kapa .. gde god
krenes ako ne ides sa puno para kostace te ko svetog petra kajgana ..

u svakom slucaju, onako kako sam ti napisao (sa TEMP int promenjljivom)
to mora da radi ... e sad ti vidi, ako imas free mesta u flash-u i nije
ti oglavu za brzinu to ce da radi ... ako ti ponestane flash-a ukini
float i odradi to sa intom
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme