Große Zahlen
-
Hi,
Ich führe derzeit ein paar größere Berechnungen durch und bekomme immer wieder Zahlen wie 1.7633e+006 (ist ein Beispiel, ich denke ihr wisst was ich meine).
Ich habe als Typ schon double genommen und unsigned würde das auch nicht mehr wirklich rausreißen.
Gibt es einen größeren Typ für Zahlen, damit ich weiterrechnen kann? Oder kann jemand eine Funktion schreiben, die die Zahl trotzdem richtig ausgibt? Wäre nett

edit: Achja, läuft alles auf Konsolenanwendung
-
siehe FAQ
Ausgabe: cout << fixed << vari;
-
-
Danke dir, jetzt habe ich Zahlen wie 2326459700.000000 (ich hoffe mal die Stimmt so). Wieso aber ein Dezimalpunkt mit Nullen? Ich will keine Nachkommastellen, habe vorher extra die Zahlen gerundet (vor der Ausgabe)
-
Hallo
Was sollen wir dazu sagen ohne zu wissen was fü Code du überhaupt verwendest?
bis bald
akari
-
Die Zahlen mit denen ich rechne sind alle durch eine der beiden folgenden Zeilen initialisiert:
const double zahl1 = 15000; //hier variiert der Wert von Konstante zu Konstante
oder:
double zahl2 = 0.0; //hier ist der Wert anfangs immer auf 0, mit cin kommt dann BenutzereingabeSeit ich fixed benutze werden bei jeder Zahl sechs Nach"komma"stellen hinter dem Dezimalpunkt angezeigt.
AUCH bei 0, dann steht da: 0.000000Ich will lediglich überall den Punkt und die Nullen wegkriegen.
Meine Formel zum aufrunden (setze ich VOR dem cout << fixed ein!) sieht so aus:double roundup(double Zahl){ return floor(Zahl)+1; }
-
Hi !
Den Integeranteil kannst du dir mit der Funktion modf anzeigen lassen.
-
Wenn ich modf(zahl) benutze bekomme ich nen Fehler, dem ich entnehme, dass ein zweiter Parameter fehlt.
Was muss die zweite Angabe sein in modf? Ein kurzes Beispiel wäre nett.
-
double modf( double x, int *int_ptr );wo gehst du jetzt noch überall mit modf hausieren? Völliger overkill!
#include <iostream> #include <iomanip> using namespace std; int main( ) { double value = 1.7633e+006; cout << fixed << setprecision( 0 ) << value << endl; }greetz, Swordfish
-
Danke, teste ich gleich mal
edit: Funktioniert

Kann man jetzt noch irgendwie Tausender-Trennzeichen machen (außer mit printf, dann müsste ich alles von cout auf printf umschreiben..)
-
std::cout.imbue( std::locale( "german" ) );
-
Dann kriege ich nen Runtime Error (ohne Bluescreen) und Windows Vista beendet das Programm...
-
Das ist tragisch. Wie sieht denn dein Code aus?
-
Einfach so: (als test)
#include <iostream> using namespace std; int main(){ std::cout.imbue( std::locale( "german" ) ); //wegen dem using namespace hab ich auch schon versucht die beiden std:: wegzulassen. geht trotzdem nicht double zahl 10000000; cout << zahl; }
-
Das kompiliert? Da fehlt nämlich mindestens ein "=" zwischen zahl und 10000000.
-
David_pb schrieb:
Das kompiliert? Da fehlt nämlich mindestens ein "=" zwischen zahl und 10000000.
Das war natürlich drin. Hab den Source nicht kopiert.
-
Ich zitiere die Meldung aus der Konsole:
This application has requested the Runtime to terminate it in an unusual way. Please contact the apllication's support team for more information.
Und hier nun der zitierte Source:
#include <iostream> using namespace std; int main(){ std::cout.imbue( std::locale( "german" ) ); //ohne die beiden std:: haargenau dieselbe fehlermeldung double zahl = 10000000; cout << zahl; }Direkt nach der Fehlermeldung in der Konsole kommt Vista's typische Meldung: 'Testprojekt.exe funktioniert nicht mehr'
-
#include <locale> #include <iomanip> #include <iostream> int main() { std::cout.imbue( std::locale( "german" ) ); double zahl = 100000000; std::cout << std::fixed << std::setprecision( 2 ) << zahl; std::cin.get(); }Dieser Code läuft bei mir ohne Probleme.
-
Wenn ich den so kompiliere und ausführe (1:1 copy&paste), krieg ich auch die oben genannte Fehlermeldung.
-
Sehr mysteriös... Sollte egtl keine Probleme machen der Code.