Portál AbcLinuxu, 1. června 2025 13:44


Dotaz: C, sprintf, C++ cout

25.11.2009 15:58 Sten Fil | skóre: 4
C, sprintf, C++ cout
Přečteno: 1639×
Odpovědět | Admin
Ahoj, resim jak prevest desetinne cislo na text s max poctem cifer za desetinnou teckou. Navic tak aby cislo nekoncilo nulou.

napr. max 2 mista za desetinnou teckou:

3.2345 na 3.23

3 na 3

3.1 na 3.1

Nic lepsiho nez

sprintf (text, "%.2f", cislo);

Nasledny rucni orez znaku nula z text z prave strany.

Nejde to nejak jednoduse v ramci formatovaciho textu sprintf pripadne cout? Diky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.11.2009 16:43 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použijte g místo f.
25.11.2009 17:04 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Jenze pak .2 neudava maximalni pocet desetinych mist, ale pocet platnych cislic. Takze napriklad printf("%.2g", 12.345); vypise 12. Pokud predem nebudete znat pocet cislic pred desetinou carkou, tak je to nepouzitelne, IMHO.
25.11.2009 17:09 Sten Fil | skóre: 4
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
jj. Prave sem to testnul. Je to pocet cislic celkem a navic exponencialni format.

Takze to vyhodi treba.

3.24e+03

Coz neni zadouci.

26.11.2009 10:08 Sten Fil | skóre: 4
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Diky za napady.

Jelikoz budu mit max 2 desetinne mista sem to handmejdnul nasledovne:



sprintf (tmpText, "%.2f", value);

/* Orez znaku 0 a desetinne tecky zprava. */

if (tmpText[strlen (tmpText) - 1] == '0')

{

   tmpText[strlen (tmpText) - 1] = '\0';

   if (tmpText[strlen (tmpText) - 1] == '0')

   {

     tmpText[strlen (tmpText) - 1] = '\0';

     if (tmpText[strlen (tmpText) - 1] == '.')

     {

       tmpText[strlen (tmpText) - 1] = '\0';

     }

   }

}

26.11.2009 10:16 kulik
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Asi je to spravne, ale rada ze zkusenosti - napis na to funkci, ktera to udela ve while cyklu. Bude to prehlednejsi a nezhrouti se ti to ve chvili, kdy se rozhodnes vypisovat na 3 mista apod.
26.11.2009 10:21 Sten Fil | skóre: 4
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Jasna vec. Udelam funkci s detekci zda je ve strigu desetinna tecka, az pak zacnu orez.
25.11.2009 21:29 potejo
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud potrebuje pouze tisk tak staci cout jinak pokud potrebujete ukladat onen string tak pouzit tridu stringstream a v obou pripadech pouzit manipulator fixed nebo metodu precision a operatory '<<','>>'.
25.11.2009 22:16 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Odpovědět | | Sbalit | Link | Blokovat | Admin
Muzete to zaoukrouhlit "rucne": sprintf(text, "%.2f", round(cislo*100)/100);
25.11.2009 23:15 jekub
Rozbalit Rozbalit vše Re: C, sprintf, C++ cout
Odpovědět | | Sbalit | Link | Blokovat | Admin
fcvt by nepomohlo?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.