799 Stimmen

Wie konvertiert man eine Dezimalzahl in ein Double in C#?

Ich möchte eine Track-Bar zu ändern. Form der Opazität.

Dies ist mein Code:

decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;

Beim Erstellen der Anwendung wird folgende Fehlermeldung angezeigt:

Cannot implicitly convert type decimal to double

Ich habe versucht, mit trans y double aber dann die Control funktioniert nicht. Dieser Code funktionierte gut in einem früheren VB.NET-Projekt.

20 Stimmen

Außerdem kann Decimal keinen so großen Wert wie Double darstellen. Decimal kann nur bis zu +/-7.9228162514264337593543950335E+28 gehen, während Double bis zu +/-1.79769313486232E+308 gehen kann.

4 Stimmen

@TraumaPony es ist ein trackbar . Es ist unwahrscheinlich, dass jemals ein so hoher Wert für trackbar

6 Stimmen

Mir wurde immer gesagt, es sei besser, mit 0,0002 zu multiplizieren als durch 5000 zu teilen.

72voto

andynil Punkte 26978

Meiner Meinung nach ist es wünschenswert, so explizit wie möglich zu sein. Dies verleiht dem Code mehr Klarheit und hilft Ihren Mitprogrammierern, die ihn eventuell lesen werden.

Zusätzlich zu (oder anstelle von) dem Anhängen einer .0 an die Nummer anhängen, können Sie decimal.ToDouble() .

Hier sind einige Beispiele:

// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);

// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);

69voto

Ryan Fox Punkte 9794

Es klingt wie this.Opacity ist ein Double-Wert, und der Compiler mag es nicht, wenn man versucht, einen Dezimalwert hineinzupacken.

65voto

Dinah Punkte 50664

Sie sollten Folgendes verwenden 5000.0 代わりに 5000 .

65voto

Darin Dimitrov Punkte 990883

Le site Deckkraft Eigenschaft ist vom Typ Double:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

oder einfach:

this.Opacity = trackBar1.Value / 5000.0;

oder:

this.Opacity = trackBar1.Value / 5000d;

Beachten Sie, dass ich Folgendes verwende 5000.0 (oder 5000d ), um eine doppelte Teilung zu erzwingen, weil trackBar1.Value ist eine ganze Zahl und würde eine ganzzahlige Division durchführen, und das Ergebnis wäre eine ganze Zahl.

0 Stimmen

"trans" ist wahrscheinlich für " Transparenz "

60voto

ChrisF Punkte 130622

Angenommen, Sie verwenden WinForms, Form.Opacity ist vom Typ double also sollten Sie verwenden:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

Wenn Sie den Wert nicht anderweitig benötigen, ist es einfacher, ihn zu schreiben:

this.Opacity = trackBar1.Value / 5000.0;

Der Grund, warum das Steuerelement nicht funktioniert, wenn Sie Ihren Code geändert haben, um einfach ein Double zu sein, war, dass Sie hatten:

double trans = trackbar1.Value / 5000;

die die 5000 als Ganzzahl, und weil trackbar1.Value ist auch eine ganze Zahl Ihr trans Wert war immer Null. Indem man den numerischen Wert explizit zu einem Gleitkommawert macht, indem man das .0 kann der Compiler sie nun als Double interpretieren und die richtige Berechnung durchführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X