C#我设定了折扣,但不能得到价格 - 折扣但仍然是原价

时间:2017-09-19 12:25:31

标签: c# class methods

// here I set the discount which after the subtraction should be 150 euro         
public int SetDiscountPrice()
{
   return price = price -  (10/100)*price;
}

在这里我调用方法SetDicountPrice但它不起作用

Console.WriteLine("\nAfter selling 1 item for {0} euro, number of sofas left is {1}",sofa.SetDiscountPrice(), sofa.SellOneProduct());

3 个答案:

答案 0 :(得分:2)

int / int = int因此您的计算结果为x - 0 = x,因为10/100等于0

如果要使用浮点值计算,请使用

return price = (int)(price - (10m / 100m) * price); // m for decimal type

或者您只想在不更改初始价格的情况下获取价值

return (int)(price - (10m / 100m) * price); 

并考虑使用类型decimal作为货币值

答案 1 :(得分:1)

由于整数除法

(10/100)是一个等于0的表达式。

鉴于你告诉我们price是一个整体类型,你应该使用

return price = price - price / 10;

并注意这将始终围绕结果。或者,使用

return price = price * 9 / 10;

将向下舍入,但请注意,由于计算过程中int的数量级增加,这很容易受到整数溢出的影响。

答案 2 :(得分:0)

<强>解决方案:

一个简单的修复方法是将其转换为小数(请注意,在这种情况下,价格必须是小数):

return price = price - (decimal)10/100*price;

或使用小数作为除数:

return price = price - 10M/100M*price;

你显然也需要调整你的回报类型:

public decimal SetDiscountPrice(){
    return price = price - (decimal)10/100*price;
}

重要信息:

也许你应该真的过分思考你的尝试。以“Set”开头的方法听起来应该是属性,我认为在你的情况下它肯定是可能的。你确定你想让你的setter方法改变你的价值并同时归还吗?也许以下可以帮到你:

class YourClass{
    public decimal Price {get; set;}
    public decimal DiscountPrice => (decimal)10/100*Price;
}