Problem bei Rundungsprogramm
lima-city → Forum → Programmiersprachen → C/C++ und D
abweichen
alten dateien
code
compiler
datei
double
einbinden
erweiterung
gleiche header
hauptfunktion
hauptprogramm
header
hersteller
kleinen zahlen
liefern
meinung
normalfall
parameter
problem
zahl
-
Hallo,
ich habe ein kleines Rundungsprogramm programmiert, funktioniert bei kleinen Zahlen einwandfrei, bei größeren Zahlen funktioniert es aber leider nicht richtig. Könnt ihr mir da helfen??
Hier der Code:
/* 4. Schreibe eine Funktion runden, als Funktionswert den (kaufm‰nnisch) gerundeten Wert einer Dezimalzahl zur¸ckgibt. Dabei soll die Anzahl der gew¸nschten Dezimalstellen als Parameter ¸bergeben werden. Bsp: Runden(12.65,0) soll 13 liefern, runden(12.65,1) soll 12.7 liefern. Teste sie in einem Hauptprogramm aus. */ #include<conio.h> #include<iostream.h> #include<math.h> long double runden (long double z, int dez) { if(z>0) { z=z*(pow(10,dez)); if(floor(z+0.5)==floor(z)) { z=floor(z); } else { z=floor(z)+1; } z=z/(pow(10,dez)); } if(z<0) { z=z*(pow(10,dez)); if(floor(z-0.5)==floor(z)) { z=floor(z); } else { z=floor(z)-1; } z=z/(pow(10,dez)); } return z; } void main () { long double zahl1,zahlgerundet; int dezimalstellen; char taste; do { clrscr(); cout<<"Geben Sie eine Dezimalzahl ein: "; cin>>zahl1; cout<<"Geben Sie ein, auf wie viele Dezimalstellen gerundet werden soll: "; cin>>dezimalstellen; zahlgerundet=runden(zahl1,dezimalstellen); cout<<zahlgerundet; cout<<"\nNochmal? j/n "; taste=getch(); } while(taste=='j'); }
Statt der Funktion floor() habe ich zuerst die normale Umwandlung auf integer (also z.b. (int)z) verwendet, funktionierte bei kleinen Zahlen genauso, nur bei großen Zahlen nicht, was daran lag, dass diese Zahlen von integer nicht mehr unterstützt wurden und einfach irgendetwas als Zahl herauskam. Jedoch ist das Prinzip mit floor() ja das gleiche, aber auch hier läuft das Programm bei den großen Zahlen nicht richtig........
Danke schon im Voraus für eure Hilfe!
mfg
Fizi
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe den Code nur überflogen. Kleine Anmerkungen: <iostream.h>, <math.h> sind die alten Dateien. Du solltest <iostream> und <cmath> einbinden. Außerdem ist der Rückgabewert der Hauptfunktion int.
-
<math.h> und <math> ist doch die gleiche Header, meiner Meinung nach nur Abhängig vom Compiler....
Wenn dann <cmath>. <math.h> ist die veraltete Version.
Zitat:
Mit der Standarisierung von C++ wurden die "*.h"-Erweiterungen der C++-Header Files entfernt, sämtliche C++-Libraries in den Dateien ohne ".h" befinden sich im namespace std.
Praktisch jeder Compiler-Hersteller stellt aber auch die ".h"-Header bereit, der Unterschied ist im Normalfall nur jener, dass diese nicht in den namespace std gepackt sind. Theoretisch wäre es allerdings möglich, dass diese Header abweichen... (und vielleicht auch praktisch, sollte ein Hersteller z.b. die alten Files nicht mehr erweitern) -
Das Problem liegt in dieser Zeile:
z=z*(pow(10,dez));
z wird auf die 17te Stelle gerundet und die restlichen digits mit 0 gefüllt.
Allerdings hab ich noch keine Antwort, warum das so ist!
Beitrag geändert: 14.10.2008 23:11:31 von koslo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage