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