double to int



  • 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?



  • goody schrieb:

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

    Ich kann dich gern ein zweites Mal auf krümelkackers Post hinweisen...



  • Nexus schrieb:

    goody schrieb:

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

    Ich kann dich gern ein zweites Mal auf krümelkackers Post hinweisen...

    moment, nicht falsch verstehen.

    wenn diese ausgabe im code stand wurden auch alle anderen zahlen so ausgeben.
    dass die var "antwort" als hex ausgegeben wird war gewollt.

    ich hätte jetzt aber auch folgendes drunter schreiben können und es wäre genauso ausgegeben worden, auch ohne das "hex"

    double x = 16.0;
    int y = x;
    cout << y;
    

    und dieser teil hat ja nun nichts mit dem obigen zu tun...



  • Der Manipulator std::hex verändert das globale std::cout -Objekt, hat also auch Einfluss auf spätere Ausgaben über diesen Stream. Schliesslich erkennt der Stream den Ausdruck

    std::cout << std::hex << 15;
    

    nicht als elementare Ausgabe, nach der allfällige Manipulatoren zurückgesetzt werden.



  • ok gut zu wissen, dass dadurch das globale cout verändert wird.
    danke für die info



  • Das globale cout? Es gibt nur ein cout, und das wird verändert. ò.ó


  • Mod

    Da sieht man mal wieder die Gefahr globaler Variablen 🙂 .



  • ich wusste halt einfach nicht, dass ich mit diesem schnipsel was verändern kann. ich dachte das wäre wie beim printf einfach nur eine ausgabeoption, welche sich nur auf die aktuelle anweisung bezieht 😃


Anmelden zum Antworten