Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C++ jak vypnout výpis v semilogaritmickém tvaru

Ahoj,
začínám programovat a rozhodl jsem se otestovat své dosavadní znalosti a naprogramovat kalkulačku odpisů. Logicky mi vše funguje. Možná mi vytknete, že to mám zbytečně složitě, ale dělám to tak, abych tomu sám rozuměl :D
Teď k mému problému. Když mi program vypisuje větší čísla, tak si vypíšou v semilogaritmickém tvaru. Nevím, jak to obejít. Budu rád za každou radu.
Děkuji.

//přikládám screen kódu a výsledku :D
2htC
Rphu

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Už mi to jde. Změnil jsem proměnné z "int" na "long long" a použil header "iomanip". Potom jsem změn…
David Rubý 14.06.2016 20:47
David Rubý
podla mna si urobil uplne kraviny, ale ok :) (Napr. setprecision volaj len raz predtym). P.S. a ci…
MM.. 14.06.2016 20:50
MM..
nevíš, co bych s tím mohl udělat, aby v těch varováních nebyl takový bordel prosím? Programuju teprv…
David Rubý 15.06.2016 17:45
David Rubý
Napr. OdpisRok01 = (cena * 20) / 100; vsetko su integery, takze podla mna ked cena bude napr. 2, tak…
MM.. 15.06.2016 18:50
MM..
takže to znamená, že si mám ty proměnné na začátku programu předefinovat na double nebo float? :)
David Rubý 15.06.2016 19:04
David Rubý
Ved si ten program otestuj ze co sa stane ked zadas cena = 1, ze kolko bude OdpisRok01 P.S> a celoc…
MM.. 15.06.2016 22:15
MM..
Ono jde o to, že by se to mělo vždy každé číslo zaokrouhlovat. Ale asi máš pravdu. Mám tam potom výc…
David Rubý 15.06.2016 22:30
David Rubý
A napr. ked niekde napises cena * 22.25 tak aj vysledok toho nasobenia bude uz float, ptz cislo 22.2…
MM.. 15.06.2016 23:00
MM..
takže pokud to chápu správně... pro největší přesnost, tak mám dělat operace s čisly, které msjí ste…
David Rubý 17.06.2016 10:52
David Rubý
Nechapes to vobec. nový
MM.. 17.06.2016 10:53
MM..
Jediny absolutne presny zapis v IT je celociselny tvar (int, long, apod). Ale musis vediet jak s nim… nový
MM.. 17.06.2016 10:57
MM..
.. v tvojom pripade ked si tam chces ratat nejake domace pocty alebo maximalne milion Kcs alebo co,… nový
MM.. 17.06.2016 11:02
MM..
jasný. Díky moc a promiň, že mám tak stupidní otázky. Ani jsem z toho nechtěl nějaký seriózní progra… nový
David Rubý 17.06.2016 13:44
David Rubý
Uz len doplnim ze keby si tam pouzil na vsetky tie cisla double (s vynimkou tej skupiny ci co to ma… nový
MM.. 17.06.2016 14:23
MM..
Ano, to už jsem udělal včera nebo předevčírem :) Děkuji moc. Hodně jsi mi pomohl :) poslední
David Rubý 17.06.2016 18:19
David Rubý

Už mi to jde. Změnil jsem proměnné z "int" na "long long" a použil header "iomanip". Potom jsem změnil "cout" na "stl::cout << std::fixed << std::setprecision(o) <<..." a vše více méně běží podle mých představ.
Díky za rady. :)

Ved si ten program otestuj ze co sa stane ked zadas cena = 1, ze kolko bude OdpisRok01

P.S> a celociselne veci ako skupina apod samozrejme ostane ako integer. A mal by si si testovat uzivatelsky vstup, on tam uzivatel moze trebars napisat aj skupinu "bodni sa" :D
(neviem teraz zhlavy co urobi cin ked ma parsovat integer a uzivatel napise string, bud vrati 0 alebo hodi exception, alebo obe veci naraz, je to urcite napisane v referencii k cin, link na nejaku referenciu dal uz wikan vyssie, najdi si tam cin.

Ono jde o to, že by se to mělo vždy každé číslo zaokrouhlovat. Ale asi máš pravdu. Mám tam potom výchylky třeba 1KČ asi v důsledku těch haléřů. Takže když se rozhodnu pro proměnné double nebo float, tak musím upravit výpis na obrazovku a zaohrouhlování. Výpis upravím tak, že použiju printf.

To je to, co jsem zatím jakž takž pobral :)

A napr. ked niekde napises cena * 22.25 tak aj vysledok toho nasobenia bude uz float, ptz cislo 22.25 je float. (a desatinne cislo * integer = desatinne cislo)
Naprogramoval si to proste uplne nahodne ptz si od zaciatku nemal jasno co kde mas ulozene v jakom formate. Preto sa ma najprv studovat, az potom nieco programovat. Aby z toho neliezlo ze mam 500eur a kupil som pracku za 300eura a program napise ze mate este v penazenke 250eura :)

takže pokud to chápu správně... pro největší přesnost, tak mám dělat operace s čisly, které msjí stejný datový typ. A jelikož floor vrací float, tak mám vše předefinovat na float. Potom to bude přesně a správně...
Nevím, jestli to chápu správně

Jediny absolutne presny zapis v IT je celociselny tvar (int, long, apod). Ale musis vediet jak s nimi robit operacie, aby si dosiahol to co potrebujes. Vsetky operacie s nimi su celociselne, desatinne miesta sa po operacii odseknu.

Vsetky desatinne tvary maju v PC nejaku odchylku. float je najmenej presny, double je presnejsi. Ked chces pouzivat double, a nejaka funkcia vracia float, tak bud tu funkciu nepouzijes ale pouzijes funkciu ktora vracia double (funkcie maju aj viac moznych verzii a automaticky sa pouzije ta podla toho jaky parameter si tam dal, ked das double moze sa pouzit double verzia, to si mas najst k prislusnej funkcii v jej referencii, je to vsetko zdokumentovane a studovat to mas ty, ja tu nebudem opisovat 3 strany z referencie. Link na nejaku referenciu kniznicnych fcii viz wikan.)
Alebo druha moznost je ze si vyratas resp. odhadnes ze ci ta chyba floatu v tvojom pripade je nepodstatna a pouzijes float (zavisi od toho jake velke cisla a jake operacie s tym robis, s tym sa proste musis zaoberat ked chces take veci programovat seriozne. Inac je to len plusminus autobus bastel, jak dnes uz asi vsetko lebo vsetko robi nejaky cinan a ind a ini traktoristi)

.. v tvojom pripade ked si tam chces ratat nejake domace pocty alebo maximalne milion Kcs alebo co, tak vpohode staci aj presnost floatu. Odchykla je tusim na 8.platnej cifre ci tak nejak (tiez to je jasne definovane u toho formatu, staci si dat do google slova float presnost a studovat - to je ta cinnost ktora je nutna pred vyvojom serioznych aplikacii).

Zpět do poradny Odpovědět na původní otázku Nahoru