Laden...

Double in int konvertieren

Erstellt von little_budda vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.638 Views
little_budda Themenstarter:in
48 Beiträge seit 2007
vor 15 Jahren
Double in int konvertieren

Hallo,

ich nutze folgenden Code:


            Point[] myBlockPositions = new Point[4];

            double dHyp = 35;
            double dAlpha = 37;

            myBlockPositions[0].X = Math.Sin(dAlpha) * dHyp;
            myBlockPositions[0].Y = Math.Cos(dAlpha) * dHyp;

Der Compile bringt mit immer die Meldung:
Der Typ "double" kann nicht implizit in "int" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

Kann doch nicht so schwer sein.

A. Ich suche nach einer Lösung.
B. Ich suche nach einer Erklärung.

🤔

Gruß Holger.

gefahren werden ist nur solange schön wie man nicht selbst lenken möchte ...

3.430 Beiträge seit 2007
vor 15 Jahren

Hi,

A. Ich suche nach einer Lösung.
B. Ich suche nach einer Erklärung.

also erstens muss ich dich da auf die Dokus hinweisen, da es sich hier wirklich um eine Grundlage handelt: :rtfm: 🛈 📗

Der Grund für diese Fehlermeldung ist, dass du der X bzw. Y position nur einen Int zuweisen kannst, und keinen Double. Deshalb diese Meldung. Denn wenn aus deiner Rechnung 5,3 rauskommt, dann geht das ja nicht, weil man es ja nicht auf Pixel 5,3 positionieren kann.

Deshalb musst du das auf einen int parsen.

so, die Lösung haste da schon fast, den rest schaffst du also sicher alleine 🙂

mfg
michlG

5.742 Beiträge seit 2007
vor 15 Jahren

Hallo little_budda,

du willst die Werte von double Variablen an int Variablen (in Form von Eigenschaften von Point) zuweisen.

Beim Konvertieren von double nach int gehen Informationen verloren (Nachkommastellen, etc.). Daher geht das nicht implizit.

Möglichkeiten sind eine explizite Konvertierung, die Convert - Klasse, sowie die diversen Parse - Methoden von int.

Siehe auch: Typkonvertierungen (unter primitiven Datentypen) im openbook

Das habe ich jetzt so schön getippt, dass ich es trotz der Antwort von michlG posten will 😉

3.971 Beiträge seit 2006
vor 15 Jahren

Das habe ich jetzt so schön getippt, dass ich es trotz der Antwort von michlG posten will Augenzwinkern

dann geb ich meinen Senf auch noch dazu...

Wie die vorposter schon geschrieben haben, du musst den Double-Wert manuell nach int casten. Casten heißt soviel wie "Du weißt mehr als der Compiler". Der Compiler weißt zum Beispiel nicht wie er mit 4,3 verfahren soll. Auf oder Abrunden. Dasselbe ist mit unendlich (oder minus unendlich) den der Int-Wert nicht darstellen kann. Der Cast von Int nach Double beispielsweise führt der Compiler automatisch durch, denn alle Werte die mit Int dargestellt werden können, kannst du auch mit Double darstellen.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

S
341 Beiträge seit 2008
vor 15 Jahren

du könntest den wert auch teilen bei zB 5,3 in eine 5 und eine 3 und dann bei der nach kommazahl auf oder abrunden lassen somit erhälts du volle(ganze) zahlen und musst sie nur noch explizit in ein int convertieren

aber vllt gibts ja auch eine rundungs methode bei c# das weiß ich jetzt nicht

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
3.971 Beiträge seit 2006
vor 15 Jahren

Math.Round + zusätzliches Casten nach int (Rückgabe ist ein double, da die Stelle zum Runden noch angegeben werden kann)

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

C
252 Beiträge seit 2007
vor 15 Jahren

aber vllt gibts ja auch eine rundungs methode bei c# das weiß ich jetzt nicht

Klar gibts die Math.Round()

edit: tjo da war ich wohl ne spur zu langsam

S
341 Beiträge seit 2008
vor 15 Jahren

^^ okey na dann is das problem doch gelöst ^^

brauchte die math methoden bis jetzt noch nicht 😉 aber nun hab ich auch wieder was gelernt

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
915 Beiträge seit 2006
vor 15 Jahren

Hrm, die Vorposter haben zwar allesammt recht - nur wenn ich Sin und Cos schon sehe denke ich mal möchtest schon exakte Ergebnisse erzielen und diese auch irgendwann mal Grafisch exakt darstellen. Nutze lieber PointF und für die Grafische Darstellung ebenso den floating Wert.

Wenn es alerdings egal sein sollte ob das Ding richtig dargestellt wird oder nicht, vergiss das posting 😉

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

4.207 Beiträge seit 2003
vor 15 Jahren

In WPF sind Koordinaten Dezimalzahlen 😉

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

915 Beiträge seit 2006
vor 15 Jahren

Na ja kritzel derzeit immer noch im GDI herum 😮)

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(