double to int



  • versuch mal reinterpret cast...(2 sec mit google)

    double d = 3.14;
    int i;
    i = reinterpret_cast<int>(d);
    

  • Administrator

    cobra11freak schrieb:

    versuch mal reinterpret cast...(2 sec mit google)

    double d = 3.14;
    int i;
    i = reinterpret_cast<int>(d);
    

    Um Himmelswillen ... informier dich zuerst mal oder probier es zumindest aus, bevor du da wild herumratest. Das endet in einem simplen Kompilerfehler.

    Grüssli



  • Dravere schrieb:

    cobra11freak schrieb:

    Man kann mit einem static cast glaube ich keinen double in einen int konvertieren
    dafür gibt es doch bestimmt irgendeine funktion wie atoi wenn man einen char in einen int konvertieren will?

    Woher bloss immer wieder diese seltsamen Annahmen kommen? Wie kommt man überhaupt auf so eine Idee? 😕

    Ich komme darauf weil ich dachte das double und int andere Speichertypen sind. Scheint ja aber zu gehen;)



  • cobra11freak schrieb:

    versuch mal reinterpret cast...(2 sec mit google)

    double d = 3.14;
    int i;
    i = reinterpret_cast<int>(d);
    

    😃



  • gibst Du den int versehentlich in hex aus?

    http://codepad.org/2tE41az8

    kk



  • cobra11freak schrieb:

    versuch mal reinterpret cast...(2 sec mit google)

    Na dann gute Nacht 😮
    Vielleicht solltest du dich mehr als nur 2 Sekunden mit Google-Suchen beschäftigen...



  • beschwert euch bei chip daher hab ich das:
    http://forum.chip.de/c-c/double-int-konvertieren-504735.html

    sry *schäm* (halt die fresse)


  • Administrator

    cobra11freak schrieb:

    beschwert euch bei chip daher hab ich das:
    http://forum.chip.de/c-c/double-int-konvertieren-504735.html

    ROFL ... beste Komödie ever! Da steht sogar im Thread, dass es nicht geht. 😃 😃 😃

    Aber vielleicht würde es nicht schaden, wenn du nochmals die C++ Casts in deinem Lehrbuch durchlesen würdest. Ich will ja nicht fragen, was du mit dem "unterschiedliche Speichertypen" gemeint hast 🙂

    Grüssli



  • Hmm das ist ja jetzt super peinlich. Hätt ich mich da doch bloß rausgehalten...
    Ok ich muss ehrlich zugeben das ich noch niemals mit reinterpret , dynamic , static casts gecastet hab. Wenn ich caste dann so:

    funktion((*int) hallo);
    

    Fürs lesen bin ich viel zu ungeduldig :p

    Außerdem bin ich zu müde das mit den Speichertypen zu erklären

    Im schlechtem Gewissen einschafend
    cobra11freak



  • also bei der ganzen sache geht es um die berechnung der dezimal-zahl aus einer hex zahl.
    ich habe sämtliche ziffern der hex zahl in einem int-array vorliegen. jetzt müssen die einzelnen ziffern ja nur noch mit der entsprechenden 16er potenz multipliziert werden.
    wenn ich das ergebnis als double ausgebe passt auch alles. lediglich wenn ich es in einen int konvertieren möchte klappts nicht mehr.

    ich hab es in einem anderen kleinen programm ausprobiert und hier passt alles perfekt.

    auf meinen pc läuft XP und ich programmiere auf Visual Studio 2010
    was kann ich falsch eingestellt haben oder verändert haben, dass er mir in meinem projekt nur 10er potenzen zurückgibt wenn ich einen double konvertiere?



  • cobra11freak schrieb:

    Hmm das ist ja jetzt super peinlich. Hätt ich mich da doch bloß rausgehalten...
    Ok ich muss ehrlich zugeben das ich noch niemals mit reinterpret , dynamic , static casts gecastet hab. Wenn ich caste dann so:

    funktion((*int) hallo);
    

    Fürs lesen bin ich viel zu ungeduldig :p

    Außerdem bin ich zu müde das mit den Speichertypen zu erklären

    Im schlechtem Gewissen einschafend
    cobra11freak

    Du solltest auch ein schlechtes Gewissen haben, dafür das du C-Casts benutzt.



  • cobra11freak schrieb:

    Wenn ich caste dann so:

    funktion((*int) hallo);
    

    Tut mir echt leid, aber sogar das ist falsch. 😃

    goody schrieb:

    was kann ich falsch eingestellt haben oder verändert haben, dass er mir in meinem projekt nur 10er potenzen zurückgibt wenn ich einen double konvertiere?

    Hast du krümelkackers Antwort gesehen?



  • ja hab ich gelesen
    aber ich hab bei der ausgabe nicht versehentlich ein "<< hex" mit rein geschrieben 😃
    die ganzen zahlen kommen alle aus einer hex zahl, die habe ich aber schon soweit aufgelöst, dass ich nun jede einzelne ziffer in einem int habe.
    wenn ich diese ausgebe, stehen auch exakt die richtigen werte in der ausgabe.
    nun versuche ich ja nur mit diesen int werten weiter zu rechnen.
    das double kommt lediglich von der funktion "pow".


  • Administrator

    Gut, gibt nur noch eins. Zeige ein Minimalbeispiel, welches den Fehler reproduziert.

    Grüssli


  • Mod

    Gib dem double doch mal den Wert 10 und schau mal, was dann für eine Ausgabe kommt. Zufällig 'A'?



  • wenn ich in ein double eine 10 packe kommt eine 10 wenn ich sie als int ausgebe.
    leider passiert das selbe auch wenn ich dort eine 16 reinpacke



  • goody schrieb:

    wenn ich in ein double eine 10 packe kommt eine 10 wenn ich sie als int ausgebe.
    leider passiert das selbe auch wenn ich dort eine 16 reinpacke

    Ich sage einfach mal: Glaube ich nicht.


  • Mod

    goody schrieb:

    wenn ich in ein double eine 10 packe kommt eine 10 wenn ich sie als int ausgebe.
    leider passiert das selbe auch wenn ich dort eine 16 reinpacke

    Dann mal her mit einem compilierbaren Minimalbeispiel. Ich vermute auch mal, dass du beim erstellen dieses minimalen Programms deinen Fehler schon finden wirst: Entferne einfach nach und nach unnötige Sachen. Wenn es hinterher immer noch nicht läuft, dann postest du das Programm hier. Wenn es nach Entfernen einer Sache plötzlich läuft, hast du die Ursache gefunden.



  • ich glaubs ja auch nicht.
    ich sitz momentan noch in der uni, deswegen kommt das minimalbeispiel erst nachher.
    ich wed dann auch mal ausprobieren stück für stück alles auszukommentieren.

    danke trotzdem schonmal für alle eure antworten



  • also, ich hab das problem gefunden bzw. lokalisiert, denn verstanden hab ich es nicht 😃

    if(anzeige) {
    		cout << "Verbindunsbestaetigung gesendet: ";
                    cout << hex << static_cast<int>(antwort);
    	}
    

    wenn ich diese ausgabe auskommentiert habe, hat wieder alles prima funktioniert. lediglich wenn das cout mit dem hex im code gestanden hat, habe ich nur noch 10er potenzen bekommen.

    ich habe aus der zweiten ausgabe nun ein

    printf("%#02x\n",static_cast<int>(antwort));
    

    gemacht. so funktioniert auch alles prima.

    habt ihr eine idee wie diese ausgabe solch einen effekt hervorrufen kann?


Anmelden zum Antworten