Hilfe! Datentyp dauerhaft umwandeln

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hilfe! Datentyp dauerhaft umwandeln

    Hallo Leute,

    ich habe ein Problem, ich bin C++ Neuling und möchte versuchen eine Int32 Variable in einer Double Variable umzuwandeln, ohne den Wert in eine neue Double Variable zu verschieben, sondern den Datentyp an sich zu ändern.

    Was ich versucht habe

    Quellcode

    1. Convert::ToDouble(wert1);
    2. Console::WriteLine("Datentyp {0}",wert1.GetType);

    in der Ausgabe steht trotzdem, dass der Typ Int32 ist.

    Jedoch würde der Compiler das Ergebnis richtig ausrechnen wenn man ConverTo so anwendet (9/6=1,5)...

    Quellcode

    1. ergebnis=Convert::ToDouble(wert1) / Convert::ToDouble(wert2);


    Das Ergebnis stimmt zwar, aber wenn ich versuche den Datentyp direkt dahinter abzufragen, steht immer noch Int32 da....Also nehme ich an das ConvertTo oder auch safe_cast nur temporär verwendbar ist...
    Kennt jemand vielleicht eine Lösung?

    Gruß
    Jack
  • Sowas macht man mit TypeCasting.

    cplusplus.com/doc/tutorial/typecasting.html

    Quellcode

    1. int32 a = 3;
    2. static_cast<double>(a);
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Quellcode

    1. Int32 wert1 = 9;
    2. Int32 wert2 = 6;
    3. double ergebnis;
    4. ergebnis=Convert::ToDouble(wert1) / Convert::ToDouble(wert2);
    5. Console::WriteLine("Ergebnis = {0}",ergebnis); //Ergebnis richtig
    6. Console::Write("Datentyp Wert1\t{0}\nDatentyp Wert2\t{1}",wert1.GetType() ,wert2.GetType()); // Typ immernoch INT32
    7. static_cast<double>(wert1);
    8. static_cast<double>(wert2);
    9. Console::WriteLine("Ergebnis nach static_cast {0}",wert1 / wert2); // Ergebniss stimmt nichtmehr
    10. Console::Write("Datentyp Wert1\t{0}\nDatentyp Wert2\t{1}",wert1.GetType() ,wert2.GetType()); // Typ immernoch INT32
    Alles anzeigen


    Der Typ von "wert1" wird immernoch als Int32 erkannt. Nach static_cast<double> stimmt das ergebniss auch nichtmehr.

    Gruß
    Jack

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von JacKJodel23 ()

  • Versuch mal

    Quellcode

    1. ergebnis = static_cast<double>(wert1);


    su musst das cast result schon irgendwo speichern.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Klar geht das... aber man macht es nicht. weil das ein C-cast ist und kein C++ cast. Lies dir mal nen paar sachen zu Typecasting durch...
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Das tut man nicht nur nicht weils unschick ist, es hat auch teilweisen gravierende Folgen... zumindest in C. Spätestens wenn du einen signed short auf einen unsigned long oder andere krumme Dinger so castest, musste grübeln wie der Cast abläuft. Noch interessanter wird es dann, wenn du auch noch an einen längeren arithmetischen Ausdruck rechts von der Zuweisung hast. Spätestens dann braucht man Zettel und Stift um abzuschätzen was dabei rauskommt.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Tag,
    ich glaub hier gibts ne verwechslung!
    1. Ein Datentyp kann nicht im lauf der ausführung geändert werden!!!
    2. es gibt nur die möglichkeit mit funktionen eine umwandung zu bewirken.
    z.B.:

    Quellcode

    1. double umwandeln (int32 umzuwandeln)
    2. {
    3. //umwandlung...
    4. ......
    5. ..
    6. ...
    7. }
    8. int32 i = 100;
    9. double d;
    10. d = umwandeln(i);
    Alles anzeigen