Ich möchte eine Track-Bar verwenden, um die Deckkraft eines Formulars zu ändern.
Dies ist mein Code:
decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;
Wenn ich die Anwendung erstelle, wird der folgende Fehler angezeigt:
Cannot implicitly convert type decimal
to double
Ich habe versucht, trans
und double
zu verwenden, aber dann funktioniert das Steuerelement nicht. Dieser Code funktionierte gut in einem früheren VB.NET-Projekt.
Eine explizite Umwandlung in double
wie hier ist nicht notwendig:
double trans = (double) trackBar1.Value / 5000.0;
Es genügt, die Konstante als 5000.0
(oder als 5000d
) zu identifizieren:
double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
Eine allgemeinere Antwort auf die allgemeine Frage "Decimal vs Double?": Dezimal für monetäre Berechnungen, um die Genauigkeit zu erhalten, Double für wissenschaftliche Berechnungen, die nicht durch kleine Unterschiede beeinträchtigt werden. Da Double ein CPU-eigener Typ ist (die interne Darstellung wird in Base 2 gespeichert), sind Berechnungen mit Double besser als mit Decimal (das intern in Base 10 dargestellt wird).
Es hört sich so an, als ob this.Opacity
ein Doppelwert ist, und der Compiler mag es nicht, wenn Sie versuchen, einen Dezimalwert hineinzupacken.