在c#中持有增值税百分比

时间:2015-11-16 10:32:05

标签: c#

所以这是我的问题"写一个程序,要求用户输入一公斤西红柿不含税的价格,你要购买的千克数和百分比单位的增值税。该计划必须写出总价。"我很好,直到VAt部分让我困惑。我到目前为止已经有了这个

Int32 a;
Int32 b;
Int32 c;
Int32 d;

Console.WriteLine("please enter the price of one kilo of tomatoes without VAT.");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Please enter the amount of kilos you want.");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("please enter the amount of VAT.");
c = Convert.ToInt32(Console.ReadLine());

d = a * b;

2 个答案:

答案 0 :(得分:1)

所有货币金额应存储为小数,而不是整数。如果您不清楚这些差异,那么有很多很好的参考站点和教程可以解释C#数据类型。

英国增值税目前是一个很好的20%,因此将20整数存储就足够了。但不久之前增值税税率为17.5%,因此使用十进制变量更好。

此外,使用有意义的变量名而不是单个字母是个好主意:

decimal price;
decimal quantity;
decimal vatRate;
decimal totalPrice;

Console.WriteLine("please enter the price of one kilo of tomatoes without VAT.");
price = Convert.ToDecimal(Console.ReadLine());

Console.WriteLine("Please enter the amount of kilos you want.");
quantity = Convert.ToDecimal(Console.ReadLine());

Console.WriteLine("Please enter the VAT rate. (Default = 20)");
decimal input;
if (Decimal.TryParse(Console.ReadLine(), out input))
{
    vatRate = input / 100;
}
else
{
    vatRate = 0.20M;
}

totalPrice = price * quantity * (1 + vatRate);
Console.WriteLine("Total price = {0}", totalPrice);

您还应该看看将输出四舍五入到最近的便士。

答案 1 :(得分:0)

您应该将净价格与增值税百分比相乘,并将该金额与净价格相加。然后你应该将它与千克值相乘。但是,您不应该使用int进行此类计算,因为int不保留浮点值。您应该使用十进制进行任何类型的财务计算。通过这种方式,您可以计算出精确的结果。

我认为您的代码应该是这样的:

Int32 a;
    Int32 b;
    Int32 c;
    decimal d;

    Console.WriteLine("please enter the price of one kilo of tomatoes without VAT.");
    a = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Please enter the amount of kilos you want.");
    b = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("please enter the amount of VAT.");
    c = Convert.ToInt32(Console.ReadLine());

    d = ((decimal)a * (1 + (decimal)c / 100)) * b;
    Console.WriteLine(d);

另外3个推荐。 变量名称应该更具描述性。例如,d可以是结果或vatIncludedAmount,或者更容易理解d是什么。

a,b和c应为十进制,因为净价可以是1.15 $或者你可以买1.5公斤的西红柿。当然Convert.ToInt32应该是Convert.ToDecimal。

如果您检查用户输入或至少使用try catch块进行转换行会很好,因为用户可以输入不同于数字的内容。如果用户输入2kg转换,则抛出异常。