String to long, hilfe



  • Hallo Leute, ich muss einen String in den datentyp long umwandeln. habe da allerdings irgendwo ein denkfehler. laut aufgabe und rechnung passen 18 zahlen in ein long. wenn ich in meinem string allerdings mehr als 9 zeichen habe ,dann kommt eine komplett unsinnige zahl raus, bis zu 9 zeichen funkts.mit long long würde es klappen, aber in der aufgabe steht long. habe dazu stringstream verwernden, aber mit atol funktionierts auch nicht , also liegt wohl an was grundlegendem.

    was ist hier der denkfehler? bzw. wie geht es richtig?
    hier mein code beispiel:

    #include "Fixkomma.h"
    #include <stdlib.h>
    #include <iostream>
    #include "struktur.h"
    #include <sstream>
    using namespace std ;
    
    int main(){
    
    //char zahl[]="555.76";
    //Fixkomma i (zahl);
    
    long  tr;
    
    string test= "111117666666787";
    stringstream stream1 ;
    
    stream1<<test;
    stream1>>tr;
    cout<<tr;
    }
    

    Ausgabe:2147483647



  • Die Zahl passt offensichtlich nicht in ein long. Das hast du dir aber schon selbst zusammengereimt. Wie war die Frage?



  • ich bin davon ausgegangen , dass ein long 8 byte hat. sorry :xmas1:



  • int und long haben auf 32-bit Systemen üblicherweise 4 Byte. 8 Byte ist das long long. (Wenn du nach 64-bit kompilierst, gibt's wahrscheinlich 8 Byte für long.) :xmas1:



  • Auf Unixsystemen hat ein long bei 64bit auch 64bit, bei Windoof immer 32bit.



  • bzw. wie geht es richtig?

    Mit long wird das nix, weil du nicht garantieren kannst, dass deine Zahl im Wertebereich von long ist.
    Nimm einfach (u)int_least64_t aus der <cstdint> , wenn du darfst.
    Sonst musst du halt einfach kleinere Zahlen zum Probieren nehmen :xmas1:

    P.S.: Der Aufgabensteller hat wohl nix kapiert ⚠



  • Sone schrieb:

    P.S.: Der Aufgabensteller hat wohl nix kapiert ⚠

    Die Erfahrung lehrt, dass Sone nach solchen Sätzen in 99% der Fälle mit eingekniffenem Schwanz davon rennt. Kapiert hat er das aber noch nicht.



  • machs halt länger long long :xmas2:



  • Ist ein unsigned long ein long im Sinne der Aufgabe?
    Könnte klappen...



  • mal nicht abschweifend:

    @TE: dein denkansatz ist vollkommen richtig. du schiebst deinen string in den stringstream und holst ihn (wie bei einer benutzereingabe) da auch wieder raus. dass die zahl nicht passt ist ein ganz anderes thema, von daher sollte das problem gelöst sein.

    wenn nicht, lösungsvorschläge wurden genannt mit long long und unsigned long long und even longer und was weiss ich



  • otze schrieb:

    Sone schrieb:

    P.S.: Der Aufgabensteller hat wohl nix kapiert ⚠

    Die Erfahrung lehrt, dass Sone nach solchen Sätzen in 99% der Fälle mit eingekniffenem Schwanz davon rennt. Kapiert hat er das aber noch nicht.

    Was zum Teufel redest du da? Was soll ich nicht kapiert haben? Es ist doch offensichtlich, dass der Aufgabensteller denkt, long kann auf jeder Maschine mindestens 18-stellige Dezimalzahlen speichern, was natürlich Blödsinn ist.



  • desariel schrieb:

    laut aufgabe und rechnung passen 18 zahlen in ein long.

    Sollten sogar ein paar milliarden gehen.



  • 24234234.3242342. schrieb:

    desariel schrieb:

    laut aufgabe und rechnung passen 18 zahlen in ein long.

    Sollten sogar ein paar milliarden gehen.

    die rede ist von 18 stelligen zahlen.
    eine milliarde ist 10 stellig (109)
    eine 18 stellige zahl liegt zwischen einer Billiarde (1015 => 16 Stellen) und einer Trillion (1018 => 19 Stellen)





  • eine 18 stellige zahl liegt zwischen einer Billiarde (1015 => 16 Stellen) und einer Trillion (1018 => 19 Stellen)

    Also, das kann man genauer sagen! Eine Achtzehn-stellige natürliche Zahl liegt in [10^{18}, 10^{19}), ist also im 100 Billiarden Bereich :xmas2:

    Edit: Hat sich die Frage des TEs jetzt eigentlich geklärt? Ich habe das Gefühl, ja, oder?



  • Sone schrieb:

    eine milliarde ist 10 stellig (109)

    Nein. Gerade die von dir genannte Potenz ist Neunstellig. Das sieht man doch schon am Exponenten.

    Aha. Und 1000 = 10³ hat dann 3 Stellen?



  • ipsec schrieb:

    Sone schrieb:

    eine milliarde ist 10 stellig (109)

    Nein. Gerade die von dir genannte Potenz ist Neunstellig. Das sieht man doch schon am Exponenten.

    Aha. Und 1000 = 10³ hat dann 3 Stellen?

    Mist...



  • Sone schrieb:

    Mist...

    Die Erfahrung lehrt, dass Sone nach solchen Sätzen in 99% der Fälle mit eingekniffenem Schwanz davon rennt. Kapiert hat er das aber noch nicht.

    😉 :xmas1: 👍


Anmelden zum Antworten