user1152722
user1152722

Reputation: 943

Operator '*' cannot be applied to operands of type 'double' and 'decimal'

I get this message in my program but i don't know how to fix it i have search on the net but don't find any thing that can help me.

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;

Operator '*' cannot be applied to operands of type 'double' and 'decimal' is what comes up on Rate = Vat * Finalprice; and i don't know i can fix it

Upvotes: 50

Views: 106027

Answers (5)

MarwanAbu
MarwanAbu

Reputation: 179

in my case I used M at the end of decimal number and its work

string performance = dgvResult.Rows[i].Cells[9].Value.ToString();
string sdi = dgvResult.Rows[i].Cells[6].Value.ToString();
    if (Convert.ToDecimal(sdi) >= 1.1M && Convert.ToDecimal(sdi) <= 1.5M)
                        {
                            dgvResult.Rows[i].Cells[9].Value = 2;
                        }

Upvotes: 1

Ergwun
Ergwun

Reputation: 12978

You can't multiply a decimal by a double. You can fix this by type casting, but you probably just want to stick with using decimal for all prices and VAT rates throughout.

The type decimal was designed to be useful for financial calculations since it offers high precision at the cost of reduced range for the size of the type in bytes.

Upvotes: 5

Junichi Ito
Junichi Ito

Reputation: 2588

Try this:

Rate = (decimal)Vat * Finalprice;

Upvotes: 29

Mark Brackett
Mark Brackett

Reputation: 85655

You need to cast one to the other. My guess is that both Price and all of your VAT rates should really be decimal - double isn't (usually) appropriate for dealing with any type of monetary values.

Upvotes: 19

Andrew Barber
Andrew Barber

Reputation: 40150

Change foodVATRate to decimal, too. There doesn't seem to be any reason for it to be double.

Upvotes: 4

Related Questions