2016-05-30 7 views
0

Ich habe versucht, die Lösung mehrere Male zu kompilieren. Aber es kompiliert nicht, wenn ich double als variablen Typ verwende. Der Code ist:
Arthetic Operation kann zwischen Int und Dezimal aber nicht zwischen Dezimal und Doppel in C# Konsole App

using System; 
class program 
{ 
    static void Main() 
    { 
     bool Flag=true; 
     string action = "Null"; 
     double priceGain=0; 
     Console.WriteLine("press 'q' or write \"quit\" to exit the application"); 
     while(Flag==true) 
     { 
      Console.WriteLine("What is the price Gain? "); 
      string input=Console.ReadLine(); 
      if(double.TryParse(input,out priceGain)) 
      { 
       if (priceGain <= 2m) 
       { 
        action ="Sell"; 
       } 
       else if(priceGain > 2m && priceGain <= 3m) 
       { 
        action="Do Nothing"; 
       } 
       else 
       { 
        action="Buy"; 
       } 
       Console.WriteLine(action); 
      } 
      else if (input.ToLower()=="q" || input.ToLower() =="quit") 
      { 
       Environment.Exit(0); 
      } 
      else 
      { 
       Console.WriteLine("Invalid Input! please enter a number"); 
      } 
     } 
     Console.ReadKey(); 
    } 
} 


Der Fehler, den ich immer bin beim Kompilieren ist:

Fehler CS0019: Operator '< =' nicht auf die Operanden des Typs angewendet werden kann 'double' und ' Dezimal '
Fehler CS0019: Operator'> 'kann nicht auf Operanden vom Typ' double 'und' decimal 'angewendet werden Fehler CS0019: Operator' < = 'kann nicht auf Operanden vom Typ' double 'und' decimal 'angewendet werden


Aber wenn ich int oder dezimal verwende statt Doppel als Variablentyp der Progamm kompiliert und Fein arbeiten.

+0

Die Fehlermeldung sagt genau das, was falsch ist. Double kann nicht mit Dezimal verglichen werden. Vergleichen Sie es also mit etwas anderem, wie einem anderen Doppel. –

+0

Nicht so offensichtlich, wenn Sie nicht wissen, die shorthands 'm',' d', 'ul', etc. @RaymondChen –

+0

@PatrickHofman gut das m Suffix war im ursprünglichen Programm, so nehme ich an, sie wissen, was es bedeutet zu sehen, wie sie es geschrieben haben. –

Antwort

2

2m ist ein decimal seit der m ist kurz für dezimal. Sie können d verwenden, wenn Sie ein Doppel wollen.

if (priceGain <= 2d) 

decimal und int kann ohne Gießen verglichen werden, aber nicht verdoppeln, wie Sie erlebt haben.

Beachten Sie, dass Sie möglicherweise an der Ungenauigkeit von Gleitkommazahlen leiden. Verwenden Sie daher Dezimalzahlen.

+0

Sie: _ 'decimal' und' int' können ohne Casting verglichen werden, aber nicht 'double'_ Genauer gesagt, kann ein' decimal' und ein 'int' verglichen werden, und in gleicher Weise ein' double' und ein 'int' kann verglichen werden. Aber das liegt wirklich daran, dass es eine ___implicit___ Umwandlung von "int" nach "decimal" und auch von "int" nach "double" gibt. Dies ist also wirklich ein Vergleich von zwei 'Dezimal' bzw. zwei' Doppel' nach der impliziten Umwandlung der rechten Seite. So sind "Dezimal" und "Doppel" in dieser Hinsicht "symmetrisch", und sie können nicht direkt miteinander verglichen werden. –

1

M bezeichnet ein decimal Literal. Für das Doppelte verwenden Sie einfach z. 2 (oder besser, 2d) anstelle von 2M.

0

Ändern Sie die Doppel in Dezimalzahlen und es sollte funktionieren, wie folgt aus:

using System; 
class program 
{ 
    static void Main() 
    { 
     bool Flag = true; 
     string action = "Null"; 
     decimal priceGain = 0M; 
     Console.WriteLine("press 'q' or write \"quit\" to exit the application"); 
     while (Flag == true) 
     { 
      Console.WriteLine("What is the price Gain? "); 
      string input = Console.ReadLine(); 
      if (decimal.TryParse(input, out priceGain)) 
      { 
       if (priceGain <= 2m) 
       { 
        action = "Sell"; 
       } 
       else if (priceGain > 2m && priceGain <= 3m) 
       { 
        action = "Do Nothing"; 
       } 
       else 
       { 
        action = "Buy"; 
       } 
       Console.WriteLine(action); 
      } 
      else if (input.ToLower() == "q" || input.ToLower() == "quit") 
      { 
       Environment.Exit(0); 
      } 
      else 
      { 
       Console.WriteLine("Invalid Input! please enter a number"); 
      } 
     } 
     Console.ReadKey(); 
    } 
} 
Verwandte Themen