Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kommastellen einer double werden gerundet

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
22.03.2006, 12:40 Uhr
Isabelle



Hallo,

ich hab ein großes Problem:

Hier ist erst mal der Code


C++:
double dLatDeg = 48.083333;
double dIntPart;
double dTempLat = modf(dLatDeg, &dIntPart);
dLatDeg = (dIntPart * 100.000) + ((dLatDeg - dIntPart) * 60.00);


Das Ergebnis von dTempLat ist 0,083333, der Wert von dIntPart ist 48 und dLastDeg sollte dann eigentlich 4804.9998 sein. Das ist es aber nicht! Irgendwie werden die Nachkommastellen einfach gerundet und das Ergebnis ist dann 4805. Aber ich brauche die Nachkommastellen unbedingt, wenigstens 2. Wenn ich mir dIntPart nach dem Aufruf von modf ausgeben lasse, erhalte ich komischerweise auch nicht 48.0 sondern eben nur 48. Statt modf habe ich auch schon floor benutzt und ich habe auch schon versucht den Integer-Teil (also dIntPart) in einen Integer zu casten. trotzdem erhalte ich immer das gleiche Ergebnis für dLatDeg.

Kann mir hier vielleicht jemand helfen? Es wäre sehr dringend,
Danke,
Isabelle


Bearbeitung:
cpp tags...

Dieser Post wurde am 22.03.2006 um 13:52 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.03.2006, 13:55 Uhr
kronos
Quotenfisch
(Operator)


Sollte funktionieren... Mit welchem Befehl gibst du den Wert aus?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.03.2006, 14:19 Uhr
Isabelle



Mit printf:


C++:
printf("%.5lf\n", dLatDeg);


Hier wird die Zahl auch richtig mit 4804.9998 ausgegeben. Das Problem ist nur, dass ich dLatDeg als Parameter an eine andere Funktion übergeben muss und dort in einen String konvertiere. Aber dLatDeg kommt dort schon nicht richtig an, sondern eben gerundet. Um eine double in einen String zu konvertieren habe ich das geschrieben:


C++:
void doubleToString(double d, String &string)
{
    ostringstream ostrTemp;
    ostrTemp << d;
    string = ostrTemp.str();
}



Ich habe auch schon versucht, dLatDeg direkt in der Methode, in der ich den Wert berechne so zu konvertieren:


C++:
strLat.format("%.5lf", dLatDeg);


(Direkt nach der Berechnung, da ist nichts mehr dazwischen)

Allerdings erhalte ich dann, wenn ich mir den Wert von dLatDeg mit cout ausgeben lasse nur:
0.00000

Bis vor kurzem konnte ich mit format noch ganz normal arbeiten, keine Ahnung, warum mir jetzt nur noch Nullen angezeigt werden.

Danke für deine Hilfe!!

Dieser Post wurde am 22.03.2006 um 14:29 Uhr von Isabelle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.03.2006, 14:45 Uhr
kronos
Quotenfisch
(Operator)


Nimm doch einfach sprintf?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.03.2006, 16:29 Uhr
Isabelle



Das habe ich auch schon probiert, allerdings kam da ein Bufferüberlauf, weil ich das Programm in einer for-Schleife mehrmals hintereinander durchlaufen hab lassen.
Ich habe meine Anwendung allerdings auf einem anderen Rechner laufen lassen und da hat es dann seltsamerweise funktioniert. Kann es sein, dass mit meinem Compiler etwas nicht stimmt oder das ich aus Versehen irgendetwas umgestellt habe?
Ich benutze Microsoft Visual C++ Development Environment 2003 v. 7.1.3088, auf dem anderen Rechner aber auch!

Kannst du dir vorstellen, woran das liegen könnte?''

Dieser Post wurde am 22.03.2006 um 16:32 Uhr von Isabelle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.03.2006, 16:55 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Zeig mal den genauen Code. Ich würde mal eher vermuten du müllst da in Speicher rum der dir nicht gehört und das es auf der einen Kiste nicht zum Absturz geführt hat war mehr Zufall...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.03.2006, 17:26 Uhr
Isabelle



Auf der einen "Kiste" habe ich es so gemacht, wie vorhin beschrieben, nur etwas ausführlicher:


C++:
void getLatitude()
{
    //....
   double dLatDeg = 48.08333;
   dLatDeg = abs(dLatDeg);
   double dTempLat1 = floor(dLatDeg);
   double dTempLat2 = dLatDeg - dTempLat1;
   dTempLat2 = round(dTempLat2, 5);
   dTempLat2 = dTempLat2 * 60.000;
   dLatDeg = dTempLat1 * 100.000 + dTempLat2;

   String strLat;
   doubleToString(dLatDeg, strLat);
   cout<<strLat;

  //hier steht noch mehr ist aber uninteressant
}

void doubleToString(double d, String &string)
{
    string.format( "%.4lf", d );
}



Ich weiß, dass man vor allem den oberen Teil kürzer machen kann, war jetzt nur zum Testen.
Bis vor kurzem war es kein Problem diese Anwendung auf verschiedenen Rechner auszuführen. Aber wenn ich mir strLat ausgeben lasse, dann erhalte ich nur 0.0000. Wenn ich strLat in eine Textdatei schreibe, dann steht da auch nur 0.0000.

Danke für eure Hilfe,
Isabelle

Dieser Post wurde am 22.03.2006 um 17:41 Uhr von Isabelle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.03.2006, 18:54 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
std::string strLat;
std::stringstream ss;
ss<<dLatDeg;
strLat = ss.str();
std::cout<<strLat<<std::endl;



an sonsten wie kronos schon sagte sprintf ist auch ganz nett
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.03.2006, 21:26 Uhr
kronos
Quotenfisch
(Operator)


Was ist überhaupt String??
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.03.2006, 21:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Was ist überhaupt String??


Das eigentliche Problem
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: