Dezimalzahlen runden



  • Hallo,

    ich hab folgendes Probelm. Wir sollen eine Funktion schreiben die eine eingegebene Dezimalzahl richtig rundet.
    Mein Problem ist, dass folgender Quelltext bei meinem Programmierpartner funktioniert bei mir aber ein falsches Ergebnis ausgibt.

    void runden_dezimalzahl ()
    {	
    	double dezimalZahl = 0.0;
    	int gerundeteZahl = 0;
    
    	printf("Bitte geben Sie die zu rundende Dezimalzahl ein: ");
    	scanf("%lf", &dezimalZahl);
    
    	if (dezimalZahl >= 0)		/*Pruefung ob die Zahl negativ oder positiv ist.*/
    		{
    		gerundeteZahl = (dezimalZahl + 0.5);	/*Runden fuer positive Zahlen*/
    		}
    	else	{
    		gerundeteZahl = (dezimalZahl -0.5);	/*Runden fuer negative Zahlen*/
    		}
    
    	printf("%.3f ist gerundet %d .\n\n", dezimalZahl, gerundeteZahl);
    	fortsetzen();
    
    }
    

    Bei mir ist es jedoch so das der gcc 4.4 bei der Umwandlung von double in Integer Zahlen automatisch richtig rundet und deswegen das Ergebnis falsch wird mit der Funktion... gab es da irgend eine Änderung von früheren gcc version zu der 4.4 ?!?

    Ich programmiere unter Ubuntu 9.10 mit dem compiler befehl gcc -Wall -pedantic -o Menue.bin Menue.c





  • Hallo,

    danke für den Post, leider nicht das was ich meinte. Wie ein Algorythmus zum Runden von Zahlen aussehen kann weiss ich. Meine Frage/Porblem ist, dass beim Umwandeln von double in Int bei meiner gcc Version automatisch gerundet wird und somit Algorythmen wie der mit dem +0.5 und -0.5 trick, zu einem falschen Ergebnis führen. Im Prinzip ist dieses automatische Runden eine feine Sache aber nicht wenn man einen Algorythmus schreiben soll der eben das tut.... Soviel zu meinem Problem meine Frage ist nun weiss jemand ob das von der gcc 4.4 Version kommt ?




Anmelden zum Antworten