You are not logged in.

  • Login

1

Sunday, February 15th 2009, 8:12pm

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

Source code

1
2
Convert::ToDouble(wert1);
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)...

Source code

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

2

Sunday, February 15th 2009, 8:17pm

Sowas macht man mit TypeCasting.

http://www.cplusplus.com/doc/tutorial/typecasting.html

C/C++ Quellcode

1
2
int32 a = 3;
static_cast<double>(a);

3

Sunday, February 15th 2009, 8:25pm

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
Int32 wert1 = 9;
Int32 wert2 = 6;
double ergebnis;
	
ergebnis=Convert::ToDouble(wert1) / Convert::ToDouble(wert2);
Console::WriteLine("Ergebnis = {0}",ergebnis); //Ergebnis richtig
Console::Write("Datentyp Wert1\t{0}\nDatentyp Wert2\t{1}",wert1.GetType() ,wert2.GetType()); // Typ immernoch INT32

static_cast<double>(wert1);
static_cast<double>(wert2);
Console::WriteLine("Ergebnis nach static_cast {0}",wert1 / wert2); // Ergebniss stimmt nichtmehr

Console::Write("Datentyp Wert1\t{0}\nDatentyp Wert2\t{1}",wert1.GetType() ,wert2.GetType()); // Typ immernoch INT32


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

Gruß
Jack

This post has been edited 6 times, last edit by "JacKJodel23" (Feb 15th 2009, 8:39pm)


4

Monday, February 16th 2009, 11:40am

Versuch mal

C/C++ Quellcode

1
ergebnis = static_cast<double>(wert1);


su musst das cast result schon irgendwo speichern.

5

Tuesday, February 17th 2009, 11:57am

ergebnis = wert1;

tuts genauso, trotzdem danke für die Hilfe JFox.

Gruß
Jack

6

Tuesday, February 17th 2009, 1:44pm

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...

7

Tuesday, February 17th 2009, 10:54pm

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.

8

Tuesday, April 14th 2009, 7:01pm

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.:

C/C++ Quellcode

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

9

Tuesday, April 14th 2009, 9:08pm

Was en Blödsinn....

C/C++ Quellcode

1
2
int a = 100;
double f = static_cast<double>(a);


Und net anders bei primitiven Datentypen.
Punkt.
MfG

Social bookmarks