2012-01-18 281 views
17

consigo este mensaje en mi programa, pero no sé cómo solucionarlo tengo buscar en la red, pero no encuentro Lo que puede ayudarmeoperador '*' no se puede aplicar a operandos de tipo 'doble' y 'decimal'

private double Price; 
private int Count; 
private double Vat; 

private const double foodVATRate = 0.12, otherVATRate = 0.25; 
private decimal Finalprice; 
private decimal Rate; 

public void Readinput() 
{ 
    Finalprice = (decimal)(Price * Count); 
} 

private void cal() 
{ 
    char answer = char.Parse(Console.ReadLine()); 
    if ((answer == 'y') || (answer == 'Y')) 
     Vat = foodVATRate; 
    else 
     Vat = otherVATRate; 

    Rate = Vat * Finalprice; 

operador '*' no se puede aplicar a operandos de tipo 'doble' y 'decimal' es lo que aparece en la Velocidad = IVA * Finalprice; y no sé si puedo arreglarlo

Respuesta

5

Cambie foodVATRate a decimal, también. No parece haber ninguna razón para que sea el doble.

13

, es necesario especificar una a la otra. Mi conjetura es que tanto el precio como todos los tipos de IVA deben ser realmente decimal - doble no es (por lo general) adecuado para hacer frente a cualquier tipo de valores monetarios.

+0

Y un gran artículo que explica por qué no: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – doblak

5

Prueba esto:

Rate = (decimal)Vat * Finalprice; 
2

Usted no puede multiplicar una decimal por un double. Puede solucionar este problema mediante la conversión de tipos, pero es probable que sólo quieren seguir con el uso de decimal para todos los precios y los tipos de IVA en todas partes.

El tipo decimal fue diseñado para ser útil para los cálculos financieros, ya que ofrece una alta precisión a un costo reducido para el tamaño del tipo en bytes.

Cuestiones relacionadas