lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Ich habe eine var als 0.0 initialisiert und möchte sie im Nachhinein zu Float, Double oder Decimal casten.

var fValueDest = 0.0;
var fValueSource = 0.0;
var fResult = 0.0;

if (typeDest == typeof(int))
   fValueDest = (float)(int)objectValueDest;
else if (typeDest == typeof(float))
   fValueDest = (float)objectValueDest;
else if (typeDest == typeof(double))
   fValueDest = (double)objectValueDest;
else if (typeDest == typeof(decimal))
   fValueDest = (decimal)objectValueDest;

if (typeSource == typeof(int))
   fValueSource = (float)(int)objectValueSource;
else if (typeSource == typeof(float))
   fValueSource = (float)objectValueSource;
else if (typeSource == typeof(float))
   fValueSource = (double)objectValueSource;
else if (typeSource == typeof(decimal))
   fValueSource = (decimal)objectValueSource;

Ich kann es auf alles auf Float und Double casten aber nicht auf decimal. Wie kann ich daraus ein decimal machen?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte
Das geht nicht weil Typen nicht verändert werden können. In deinem Fall wird es zu einem Double deshalb funktionieren alle kleineren Datentypen.
von (682 Punkte)  
0 Pluspunkte 0 Minuspunkte

var ist kein Typ der "sich ändern lässt“ sondern eine Anweisung für "der Compiler soll den Typ hier einmalig ableiten". Der Compiler macht aus

var fValueDest = 0.0;

ein Double daraus.

double fValueDest = 0.0;

Ab da ist fValueDest für immer ein double (zur Compile-Zeit). decimal -> double wird in C# nicht implizit konvertiert (nur explizit), weil das potentiell Genauigkeit verliert. Wenn du z.B

fValueDest = (double)(decimal)objectValueDest;

machst. Ein decimal ist genauer als ein Double deshalb geht bei der Konvertierung Genauigkeit verloren. Besser wäre alles als decimal zu initialisieren.

decimal fValueDest = 0m;
decimal fValueSource = 0m;
decimal fResult = 0m;

und danach konsequent nach decimal konvertieren.

fValueDest = Convert.ToDecimal(objectValueDest);
fValueSource = Convert.ToDecimal(objectValueSource);
von (784 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2,524 Fragen

3,043 Antworten

281 Kommentare

13 Nutzer