2012-01-18 2 views
17

Я получаю это сообщение в своей программе, но я не знаю, как его исправить. У меня есть поиск в сети, но не найти что может помочь мне.Оператор '*' не может применяться к операндам типа 'double' и '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; 

оператора «*» не может быть применен к операндам типа «двойной» и «десятичной» является то, что приходит на Rate = Vat * Finalprice; и я не знаю, я могу исправить это

ответ

5

Изменить foodVATRate до decimal, тоже. Кажется, нет никаких причин, чтобы он был двойным.

13

Необходимо наложить один на другой. Я предполагаю, что как Цена, так и все ваши ставки НДС должны быть действительно десятичными - двойная (обычно) не подходит для работы с любыми денежными значениями.

+0

И отличная статья, объясняющая почему нет: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – doblak

5

Попробуйте это:

Rate = (decimal)Vat * Finalprice; 
2

Вы не можете умножить decimal на double. Вы можете исправить это путем литья типа, но вы, вероятно, просто хотите придерживаться decimal по всем ценам и ставкам НДС.

Тип decimal был разработан, чтобы быть полезным для финансовых расчетов, поскольку он предлагает высокую точность за счет уменьшения диапазона для размера типа в байтах.