te groot getal?

Status
Niet open voor verdere reacties.

woolfke

Gebruiker
Lid geworden
15 feb 2008
Berichten
6
Ik wil een getal inlezen met 2 cijfers na de komma.
Dus declareer ik die als double.

double getl;
cout <<"geef getal"<<endl;
cin>>getl;

voor kleine getallen geen probleem bv 22.33
voor een groot getal 62332.39 rond hij af naar 62332.4
ik heb al andere data types gebruikt zoals float , long double ed.
kan iemand helpen?
Groetjes
 
Die waarde is zeker niet te groot/lang voor een double.
Het ziet er eerder naar uit dat jij met een precisieprobleem zit bij het weergeven van je variabele.

Post anders de specifieke programmacode eens, dan kijken we er even naar om te zien wat er precies foutloopt.

--Johan
 
Ik heb de code dan aangepast zodat ze nu wel werkt.
cout.precision(8); gewoon ertussen gezet.
Ik ben eigenlijk nog maar pas bezig me C++,voorheen programmeerde ik in VB.NET.
In een andere procedure waar ik de waardes gewoon samentelde gaf hij "nan" als uitkomst
Dat kon ik dan oplossen door ze eerst op 0 te initializeren
Blijkbaar heb ik't een en't ander nog niet door.
Toch bedankt voor uw reactie.

void nieuwRekening()
{
char naam[20];
long double val;

cout<<"geef de rekening een naam."<<endl;
cin.getline(naam,20);
rek.setNaam(naam);
cout.precision(8);
cout<<"hoeveel staat er momenteel op die rekening?"<<endl;
cin>>val;

rek.setValuta(val);
cout<<sizeof(long double)<<endl;//om te testen
cout<<val<<endl;
cout<<rek.getValuta()<<endl;
cin.ignore();
vecRek.push_back(rek);
}
 
Toch vind ik het wel raar, heeft cout standaard een precisie restrictie?

Volgens mij zou zoiets ook moeten werken:
Code:
printf("Groot getal: %f", getl);
 
'k ben een leek momenteel,in c++.
die code :cout.precision(8); werkt dus wel degelijk.
In een andere sub procedure wil ik dus die double wegschrijven naar een xml file.
Dan rond die zijn getal toch weer af zeker ???
Dan schrijf ik die double naar een char array met de code:

d3 = 676345.38;
char buffer [12];
sprintf(buffer,"%2f",d3);

Momenteel werkt dus m'n programma,maar waarom die dus afrond begrijp ik niet?
groetjes
 
Bedoel je dat het sprintf statement afrond of (nog steeds) de cout?

Cout is namelijk een onderdeel uit de klassen bibliotheek STL. Het kan zeker zo zijn dat daar standaard op weinig decimalen wordt afgerond...
 
Nee hoor,die sprintf statement werkt heel goed.
Die double wordt opgeslaan en uitgelezen in een xml file,dus die is eigenlijk een tekst (string)
Ik heb dus eigenlijk een class aangemaakt (class rekening).
Gewoon een kleine class met een veld double(valuta) en een chararray(naamrekening).
Deze staan in private:
In het public gedeelte staan dan functie's getValuta en setValuta.
Bij het uitlezen van die xml,lees ik die in in een object ,dat object plaats ik dan in een vector.
In die subprocedure gebruik ik dus geen cout,en rond die double zich af.
double prijs = 0;
char * pEnd;
char str[40];
na inlezen uit xml
prijs = strtod(str,&pEnd);
door gewoon cout.precision(10); bovenaan in die subprocedure te zetten,rond hij niet af.
Nu staat er in die xml ook de gegevens aankopen(wat ik dus per dag koop).
Vandaar die naam prijs ipv valuta,die bedragen zijn kleiner dan wat er op een spaarrekening staat hé bv 12.23 en daar rond die nooit af.
Vandaar dus mijn topic titel "te groot getal?"
Dat is dus voor het inlezen van de xml.
Voor het opslaan(wegschrijven naar xml) rond die weer af bij een groot getal.
Daar gebruik ik dan sprintf voor,dus alles werkt normaal terug tot nu toe.
C++ is een stuk lastiger voor mij dan ik voorheen dacht,maar wel plezant.
Groetjes
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan