Potřebuju řetezec ve stringu převést do doublu např. vstupní čislo bude 1.32465489e+002.Pokud někdo víte jak na to ozvěte se díky.
Vstup je z textového souboru ne z klavesnice.
ICQ : 211005169
Fórum › C / C++
Převod stringu do doublu
http://www.cplusplus.com/reference/clibrary/cstdlib/strtod.html
ako som na to narazil ?
3. odkaz na http://www.google.sk/search?num=50&hl=sk&q=string+to+double+C%2B%2B&meta=
tam použivaju nejaku funkciu strtod tak ju dam do googla : http://www.google.sk/search?num=50&hl=sk&q=strtod&btnG=H%C4%BEada%C5%A5&meta=lr%3D
;)
To Hula :
std::string str("1.2329873244");
std::istringstream istrs(str);
double number_i_need = 0.0;
istrs >> number_i_need;
popisany kod som si neoveroval, tak dufam ze bude fungovat
Dekuju vsem prevod uz mi funguje :smile2: Ale mam problem s presnosti vypoctu, zadavam cisla napr. "1.2697189e+002" ale kdyz je ze stringu prevedu do doublu a vypisu na obrazovku je z neho toto "126.972" .Potreboval bych nejak nastavit aby mi to porad pocitalo s cislama ve v puvodnim tvaru "0.0000000e+000" .
Děkuju za rady
Tak počítat to v tomhle tvaru určitě nebude. Přesnost taky moc neovlivníš. Nicméně pokud to chceš jen vypisovat ve vědeckém formátu, tak stačí nastavit formátovací flag výstupního proudu pomocí metoy setf.
std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield);
double d = 12.456e+002;
std::cout << d << std::endl;
printf("%e\n", d); // jen pro nazornost
Pokud se nemýlím, tak přesnost určitě neovlivníš. Ta je dána velikostí datového typu a u doublu přenot také určuje standard IEEE 754. Kromě toho jsi si opravdu jistý, že double ti nestačí(snad by stačil i float)?? A tuším, že 15 platných číslic je dost, když se kouknu na ten příklad, tak se to tam prostě vejít musí. Rozhodně se neneche oklmat výpisem, ten bude vždy zaokrouhlený. Pokud ti to nestačí, pak sáhni po nějaké knihovně.
No, tak si pomocí metody precision výstupního proudu nastav počet číslic. Ale opatrně double má, jak jsem psal 15 platných číslic, takže pak už tam bude jen nějaký bordel. Viz příklad
std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield);
std::cout.precision(20);
double d = 1.24567891235676129e+002;
std::cout << d << std::endl;
Dik Jura.
Funguje to jak si to psal, ale stejně se mi výsledky mírně liší od vzorovýho zadaní.Když pár čísel vynásobim, umocnim,odmocnim tak to asi sem tam něco zaokrouhlý a tam je ta chyba.To jedine nějak vypnout zaokrouhlování...
Jak už jsem psal. Double má omezenou přesnost jen na 15 číslic, to ostaní může být cokoliv - prostě nějaké smetí. takže pokud používáš umocnění, tak je možné že se dostaneš za těch 15 číslic a pak to počítá i s tím bordlem. Jen taková otázka: K čemu potřebuješ, tak přesné výpočty?? Teda pokud to není tajemstvím...
Dělal sem program do jedný soutěže kde je úkolem najít dva nejbiližší body v prostoru...vypsat jejich souřadnice a vzdálenost.Je to zadaný ve vědeckém tvaru.A výsledek má být stejně.Ale mě právě od vzorovýho liší jen asi o stotísiciny...
Program už jsem odeslal takže už to je jedno.
Nu nevim jak to myslis s tou slozitosti, ale ja to psal pomoci funkci sqrt() a pow() .Pod "n*lod n" si vybavim logaritmy z matiky, ale jeste sme neprobirali...takze vůbec netušim jak bych měl použít.
A tvoje ICQ je opravdu 666666666 ??? takovy magicky cislo ..
To Hula : to je identifikacni cislo ICQ - inferal christ-killing quail - tedy pekelne krestany-vrazdici krepelky, a odpovida trojitemu tzv. číslu šelmy.
slozitosti programu myslim jeho asymptotickou casovou slozitost, coz se da volne interpretovat jako zavislost delky vypoctu na vstupnich datech.
jestlize jsi to psal pocitanim vzdalenosti mezi kazdou dvojici bodu (predpokladam), pak je slozitost n*n> pro kazdy bod musis zkontrolovat jeho vzdalenost k ostatnim bodum, kterych je (n-1), tedy n*(n-1) operaci (zhruba), coz se asymptoticky zapisuje O(n*n). lepsi reseni najdes trebas na strankach ksp> http://ksp.mff.cuni.cz/tasks/19/solution2.html#task5 (tam resena uloha hledani dvou nejblizsich stromu je totozna s tvoji)
presne tak, ovsem pri urcovani asymptoticke slozitosti se vpodstate ignoruji konstanty a cleny mocniny nizsiho radu nez nejvyssi clen, protoze od urcite velikosti vstupu na vysledek maji malinky vliv (predstav si ze by si tu vzdalenost pocital treba pro 100000 bodu, pak by bylo celkem jedno jestli to je n*n nebo n*(n-1)).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Převod stringu na TCHAR — založil Jurda_I
Prevod stringu na cislo — založil jirkab
Prevod Stringu do pole znaku... — založil
Prevod cisla do alfanumerického stringu — založil marioff
Převod BIN stringu 00101110 na string v HEX formátu — založil oxidián
Moderátoři diskuze