Von double zu int?



  • Klar kannst du das:

    double dval = 3.14;
    int ival=(int)dval;//ival wird 3
    

    (Nachkommastellen werden dabei abgeschnitten)



  • 😃 ist nicht einmal schlimm , denn :
    1. Hab ich keine Nachkommastellen , da zu i und j immer 1 dazugezählt werden
    und i und j immer Ganzzahlig anfangen
    2. Kann ich Koordinaten mit Nachkommastellen nicht darstellen



  • CStoll schrieb:

    Klar kannst du das:

    double dval = 3.14;
    int ival=(int)dval;//ival wird 3
    

    (Nachkommastellen werden dabei abgeschnitten)

    Böser Caster :p

    MfG SideWinder



  • RobthaR schrieb:

    1. Hab ich keine Nachkommastellen , da zu i und j immer 1 dazugezählt werden
    und i und j immer Ganzzahlig anfangen

    Gar nie? Wieso dann double?

    2. Kann ich Koordinaten mit Nachkommastellen nicht darstellen

    Im Ernst, nimm ganzzahlige Datentypen, wenn du kannst. Spart Platz und ist schneller.

    MfG

    GPC



  • RobthaR schrieb:

    😃 ist nicht einmal schlimm , denn :
    1. Hab ich keine Nachkommastellen , da zu i und j immer 1 dazugezählt werden
    und i und j immer Ganzzahlig anfangen
    2. Kann ich Koordinaten mit Nachkommastellen nicht darstellen

    Warum nimmst du dann double? 🙄



  • ich benutze für die Wurzel sqrt und sqrt benötigt double

    Hab ne neue Frage : Ich hab jetzt alles richtig gestellt , aber jetzt sagt mir der Compiler :

    Der Compiler schrieb:

    math_functions.h:42: error: invalid lvalue in assignment



  • Hallo,
    kannst du uns vielleicht auch die Codezeile sagen, in der dieser Fehler im Programm auftaucht und vielleicht noch etwas Code davor, der für diese Zuweisung wichtig ist.

    MfG



  • Ach komm, den Fehler findest du doch auch so.

    Progger ist schon ne scheiss bezeichung.



  • RobthaR schrieb:

    ich benutze für die Wurzel sqrt und sqrt benötigt double

    Nun gut, aber durch einen simplen cast (int->double) kannst du sqrt weiterhin benutzen, die Nachkommastellen interessieren dich ja eh nicht...



  • Jaschi schrieb:

    kannst du uns vielleicht auch die Codezeile sagen

    Mist , ist mir heute morgen wieder eingefallen

    &KoordArrayTypeCXY[FieldPosition] = CXY10(ini,inj);
    //und noch
    #define CXY10(x,y) ((x<<5)|(y))
    

    Das wären die Zeilen
    Ich hab im Internet schon nach dem Fehler gesucht und hab gefunden , das der Fehler nur bei AMD64 Prozessoren und G++ Compilern auftaucht . Ich bin sicherlich nicht der einzige , der diese benutzt . Villeicht weiß schon jemand wie man den Fehler beheben kann .

    Außerdem weiß ich nicht was lvalue und assignment bedeuten sollen



  • Ja, das liegt daran dass man mit G++ und AMD64 nicht die Adresse eines Arrayfeldes ändern kann sondern nur dessen Inhalt. Das & vor dem Array ist da völlig fehl am Platz 😉



  • Danke 👍
    Habs jetzt mit nem Pointer gemacht



  • RobthaR schrieb:

    Ich hab im Internet schon nach dem Fehler gesucht und hab gefunden , das der Fehler nur bei AMD64 Prozessoren und G++ Compilern auftaucht .

    Keine Ahnung, wo du das gelesen hast. Aber das stimmt so nicht.

    &KoordArrayTypeCXY[FieldPosition]
    

    Dies ist schlichtweg kein l-value, kann also maximal als r-value genutzt werden. Und r-values kannst du niemals nie etwas zuweisen. Für welche Plattform du komplierst und welchen Compiler du verwendest, ist dabei völlig unerheblich.

    Übrigens:

    Für sowas

    #define CXY10(x,y) ((x<<5)|(y))
    

    solltest du besser eine inline Funktion verwenden.


Anmelden zum Antworten