分配值时c#中的折扣计算错误

时间:2015-01-05 15:24:03

标签: c# math

有人能告诉我的代码有什么问题吗?

我已经尝试过先抛出值,但我得到了相同的结果。

    /// <summary>
    /// Discount function
    /// </summary>
    /// <param name="ToDiscount">Price of an item</param>
    /// <param name="Discount">Discount</param>
    /// <param name="Type">Percent or Amount</param>
    /// <returns></returns>
    private decimal Discount(decimal ToDiscount, int Discount, DiscountType Type)
    {
        decimal temp = 0;
        try
        {
            if (Type == DiscountType.Percent)
            {
               int d = Convert.ToInt32((Discount / 100) * ToDiscount);
                decimal f = ToDiscount - d;
                temp = f;
            }
            else if (Type == DiscountType.Currency)
            {
                decimal FinalDiscount = ToDiscount - Discount;

                temp = FinalDiscount;
            }
        }
        catch (Exception ex)
        {
            Functions.ShowError(ex);
        }

        return temp;
    }

示例:

Discount(5000, 5, DiscountType.Percent);
//calculation: (5/100) * 5000 = 250
//discount: 5000 - 250 = 4750

但是我创建的那个函数我得到结果5000而不是4750。 我确实在回归时突破了点;但当我将这部分悬停int d = Convert.ToInt32((Discount / 100) * ToDiscount);时,没有答案或没有结果。

3 个答案:

答案 0 :(得分:4)

Discount / 100执行整数除法,结果为0。

因此(Discount / 100) * ToDiscount也为0,导致ToDiscount中没有任何内容被删除。

我认为您最好的办法是将Discount的类型更改为decimal,这样可以解决您在那里遇到的所有问题。

答案 1 :(得分:3)

该行:

int d = Convert.ToInt32((Discount / 100) * ToDiscount);

是否为整数算术,其中Discount / 100对零和99之间的任何折扣都为零。

您需要通过十进制或浮点应用折扣:

int d = Convert.ToInt32((Discount / 100m) * ToDiscount);

顺便说一句,命名变量Type可能会导致一些可读性问题。

答案 2 :(得分:1)

当你这样做时:Convert.ToInt32((Discount / 100)* ToDiscount); 你将拥有0因为:

Discount / 100 = 0(如果折扣是intm,结果将是int)

你应该用双号进行计算