Ik ben een newbie op het gebied van programmeren en nou was ik bezig met 1 van mijn eerste programma's: het omrekenen van euro naar gulden en andersom maar nou wil ik dus afronden op 2 getallen achter de komma en ik wil het doen met setprecision maar hoe werkt dat precies ??
Waarom die je dat niet gewoon bij het printen?
(/me doet een gokje, werkt niet vaak met c.)
code:
1
| printf("E %f#.##",fWaardeInEuro); |
(/me doet een gokje, werkt niet vaak met c.)
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Janoz, hij vraagt c++ niet c.....
Dus je bedrag wordt niet veranderd als je dit uitvoerd he! myFloat wordt dan met een precisie van 2 decimalen op het scherm afgedrukt...
Als je echt netjes wil afronden kun je het beter zo doen
Je zou eventueel floor door ceil kunnen verandern (floor is naar beneden en ceil is naar boven afronden)
code:
1
2
3
4
5
6
| #include <iomanip.h> . . . . cout<<setprecision(2)<<myFloat; |
Dus je bedrag wordt niet veranderd als je dit uitvoerd he! myFloat wordt dan met een precisie van 2 decimalen op het scherm afgedrukt...
Als je echt netjes wil afronden kun je het beter zo doen
code:
1
2
3
4
5
6
| #include <math.h> . . . . myFloat=floor(myFloat*100)/100; |
Je zou eventueel floor door ceil kunnen verandern (floor is naar beneden en ceil is naar boven afronden)
Lijkt me niet echt de methode.... meer iets in de trant van maal 100 en dan weer divsetprecision
SMANIP( int ) setprecision( int np );
#include <iomanip.h>
Parameter
np
An integer that indicates the number of significant digits or significant decimal digits to be used for floating-point display.
Remarks
This parameterized manipulator sets the streams internal floating-point precision variable to np. The default precision is six digits. If the display format is scientific or fixed, then the precision indicates the number of digits after the decimal point. If the format is automatic (neither floating point nor fixed), then the precision indicates the total number of significant digits. This setting remains in effect until the next change.
Wellicht later een werkend stukje code
Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P
Ik gebruik ook altijd setpercision (c++ nog niet zo lang), maar weet niet of die wel of niet goed afrond.
waarom zou dat niet goed zijn dan?Op dinsdag 25 september 2001 22:34 schreef hufkes het volgende:
[..]
Lijkt me niet echt de methode....
dat kan ja, maar is niet echt efficient.meer iets in de trant van maal 100 en dan weer div
Wellicht later een werkend stukje code
setprecision is de weg, hoe je het ook wendt of keert, wanneer je een float print zal je altijd (de laatste bits zijn praktisch random bij floats) een getal krijgen als 10.000011 zonder setprecision. (Dus met die *100 / 100 truuk bv)
Dat is dus geen afronden, dit is gewoon niet weergeven.Op dinsdag 25 september 2001 22:34 schreef Jelmer Barhorst het volgende:
Janoz, hij vraagt c++ niet c.....
code:
1 2 3 4 5 6 #include <iomanip.h> . . . . cout<<setprecision(2)<<myFloat;
Dus je bedrag wordt niet veranderd als je dit uitvoerd he! myFloat wordt dan met een precisie van 2 decimalen op het scherm afgedrukt...
Dit is bijna goed, maar nog net niet helemaal.Als je echt netjes wil afronden kun je het beter zo doen
code:
1 2 3 4 5 6 #include <math.h> . . . . myFloat=floor(myFloat*100)/100;
Je zou eventueel floor door ceil kunnen verandern (floor is naar beneden en ceil is naar boven afronden)
Je moet het zo doen:
code:
1
| myFloat=floor((myFloat*100)+0.5)/100; |
Nu denk je: wat de fuck? Waarom 0.5 er bij optellen?
Simpel:
Met floor wordt:
5.0->5.0
5.1->5.0
5.2->5.0
5.3->5.0
5.4->5.0
5.5->5.0
5.6->5.0
5.7->5.0
5.8->5.0
5.9->5.0
6.0->5.0
Je rond altijd naar beneden af.
Stel je doet zoals ik aangeef, dus 0.5 en dan floor:
5.0->5.5->5.0
5.1->5.6->5.0
5.2->5.7->5.0
5.3->5.8->5.0
5.4->5.9->5.0
5.5->6.0->6.0
5.6->6.1->6.0
5.7->6.2->6.0
5.8->6.3->6.0
5.9->6.4->6.0
6.0->6.5->6.0
En dat is zoals je ziet, netjes afgerond met .5 naar boven afgerond en < .5 naar beneden afgerond.
Voorbeeldjes:
100.2565464654
//*100
10025.65464654
//+0.5
10026.15464654
// floor()
10026.0
// /100
100.26
Netjes afgerond zoals je wilt. Ga zelf maar een paar keer na dit. 't is trouwens basis programmeren dit. Staat in elk basis ANSI/ISO C++ boek dit.
Die floor functie knalt alles achter de komma weg.
Ceil doet hetzelfde als floor, maar telt er eerst 1 bij op.
ik meen dat dit een typo is ?Op woensdag 26 september 2001 00:24 schreef The - DDD het volgende:
[..]
6.0->5.0
Je rond altijd naar beneden af.
en ceil doet floor + 1 ?
ceil 5.0 is dus 6.0 ?
dont think so
ok bedankt hier ben ik echt een stuk wijzer van geworden maar nou nog een vraagje hoe zet je de punten precies onder elkaar ??
Je zou bijvoorbeeld kunnen doen:Op woensdag 26 september 2001 18:57 schreef Da_Hulst het volgende:
ok bedankt hier ben ik echt een stuk wijzer van geworden maar nou nog een vraagje hoe zet je de punten precies onder elkaar ??
code:
1
2
3
4
5
6
7
8
9
| #include <iostream> #include <iomanip> .. i = 53.42; j = 1482.94; cout << setw(8) << i << endl; cout << setw(8) << j << endl; |
Nu 'reserveer' je dus 8 karakters voor het getal en ze worden rechts uitgelijnd.
Zucht waarom nou dat geemmer met cout jongens die gozer wil gewoon iets netjes recht uitgeprint hebben, en daarvoor pak je printf voor de gebruiksvriendelijkheid en handigheid. M'n aars dat het een C-functie is, hij werkt.Op woensdag 26 september 2001 18:57 schreef Da_Hulst het volgende:
ok bedankt hier ben ik echt een stuk wijzer van geworden maar nou nog een vraagje hoe zet je de punten precies onder elkaar ??
Dus:
code:
1
2
3
4
5
6
7
8
9
10
11
| int main()
{
float l_MyNumber = 3.14;
int l_Index;
for(l_Index = 0; l_Index != 10; l_Index++)
{
printf("%10.2f\n", l_MyNumber);
l_MyNumber *= l_MyNumber;
}
} |
idd, helemaal mee eens, en ik wordt echt niet goed van al dat gepiep dat het niet c++ is. Man wat maakt dat nou uit? c++ is een uitbreiding van c, geen vervanger. Dus waarom niet gewoon printf gebruiken? Het is een robuuste functie die doet wat je wilt, en waarvoor geen wazige constructies nodig zijn met manipulators enzo. Klaar, punt uit!Op donderdag 27 september 2001 11:18 schreef curry684 de waarheid
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
Hmm....OiSyN: c++ is een uitbreiding van c, geen vervanger.
Eens. Gebruik wat werkt.Dus waarom niet gewoon printf gebruiken? Het is een robuuste functie die doet wat je wilt, en waarvoor geen wazige constructies nodig zijn met manipulators enzo.
Pagina: 1