Cecko a jeho syntaxe...
Jan Waclawek
konfera na efton.sk
Středa Říjen 20 10:09:46 CEST 2021
char* dtoa(double dN, char *cMJA, int iP) {
char *ret = cMJA; long lP=1; byte bW=iP;
while (bW>0) { lP=lP*10; bW--; } // lP = 10 ^ iP, bude pouzite o 2
riadky (mimochodom tu by mohlo byt citanie z tabulky a to by to urychlilo)
long lL = long(dN); // lL = celociselna cast z dN
double dD=(dN-double(lL))* double(lP); // dD = desatinna cast z dN,
vynasobenie lP vlastne z neho urobi cislo kde celociselna cast je dlha iP
cislic
if (dN>=0) { dD=(dD + 0.5); } else { dD=(dD-0.5); } // zaokruhlenie
desatinnej casti dN na poslednu "platnu" cislicu
long lR=abs(long(dD)); // zmena desatinnej casti na cele
cislo a ostranenie znamienka
lL=abs(lL); // odstranenie znamienka z
celociselnej casti
if (lR==lP) { lL=lL+1; lR=0; } // specialny pripad, kde zaokruhlenie
desatinnej casti pretieklo do celej casti, desatinna cast je tym padom
nula a cela cast (uz absolutna) je o jednu vacsia
if ((dN<0) & ((lR+lL)>0)) { *cMJA++ = '-'; } // ak je vstupny double
zaporny ale nie prilis maly na to aby celociselna aj desatinna cast vysla
nula, tak treba napisat znamienko minus
ltoa(lL, cMJA, 10); // napise sa celociselna cast
if (iP>0) { // ak sa maju vypisovat desatiny
while (*cMJA != '\0') { cMJA++; } // najde koniec celociselnej casti
vypisanej predchadzajucim ltoa()
*cMJA++ = '.'; // napise sa tam bodka
lP=10; // kedze ltoa() nenapise uvodne
nuly, musime ich vypisat pre desatinnu cast rucne
while (iP>1) { // preto sa v tomto cykle ide
cez vsetky desatinne miesta
if (lR< lP) { *cMJA='0'; cMJA++; } // a kym su to miesta pred
prvou nenulovou cislicou, vypisuju sa nuly (mimochodom, tu by mohol byt
break a ten by to urychlil)
lP=lP*10; iP--;
}
ltoa(lR, cMJA, 10); // napokon sa vypisu zvysne
cislice desatinnej casti
}
return ret; }
wek
Další informace o konferenci Hw-list