百分比问题

时间:2016-03-29 14:26:17

标签: c#

我正在为客户开发一款应用。它应该从控制台获得一些输入,如总餐价;另外,第二行应询问提示百分比。第三个会要求taxPercent。

我有以下代码,但它失败了两个测试用例之一。 当我输入15.50作为mealCoast,15%作为小费,10%作为税,它通过了测试用例。但是,如果我为mealCost输入12.00,为提示%输入20,为税率输入8,则无法满足测试用例要求。

在这里,您可以看到我的代码示例。

double mealCoast = double.Parse(Console.ReadLine());
        int tipPercent = int.Parse(Console.ReadLine());
        int taxPercent = int.Parse(Console.ReadLine());

        //Calculating % 
        tipPercent = Convert.ToInt16(mealCoast) * (tipPercent) / 100;
        taxPercent = Convert.ToInt16(mealCoast) * (taxPercent) / 100;

        int totalCast = Convert.ToInt16(mealCoast) + tipPercent + taxPercent;

        Console.WriteLine("The total meal cost is {0} dollars.", totalCast);

        Console.ReadKey();

2 个答案:

答案 0 :(得分:1)

有几个可能的问题:

首先,要注意整数除法。它基本上意味着如果您将int数据类型除以int数据类型,则会得到int结果。请注意,您在应用程序中使用int遍布各处,这不是一个好习惯,可能您不希望这样。但是你想要在涉及金钱的计算中准确。因此,我建议您使用double - 或更好 - decimal进行数据计算

其次,请注意不可转换的string到相应的数字数据类型(是int或浮点,如double)。请勿使用Parse,但请使用TryParse确保输入可转换。

通过使用正确的数据类型和正确的方法来处理数据,您已经完成了目标。将它们放入代码中,它的外观如下:

decimal mealCoast, tipPercent, taxPercent; //use decimal, probably is best
bool mealCoastResult = decimal.TryParse(Console.ReadLine(), out mealCoast);
bool tipPercentResult = decimal.TryParse(Console.ReadLine(), out tipPercent); //use TryParse
bool taxPercentResult = decimal.TryParse(Console.ReadLine(), out taxPercent);

//Input checking, check any parsing error
if (!mealCoastResult || !tipPercentResult || !taxPercentResult){
    //do some error handlers
    return; //probably don't continue is good
}
//you could also put some while loop

//Calculating % 
tipPercent = mealCoast * tipPercent / 100;
taxPercent = mealCoast * taxPercent / 100;

decimal grandTotal = mealCoast + tipPercent + taxPercent;
Console.WriteLine("The total meal cost is {0} dollars.", grandTotal);
Console.ReadKey();

答案 1 :(得分:1)

  然而,第二种情况12.00 for mealPrice,20 for tip和8 for tax未能产生所需的输出输出应该是15 usd它打印14 usd奇怪的东西taxtPercent变量变为0

让我们看看您的示例代码:

/

decimal运算符是整数除法,如果其操作数是整数类型。它将截断句点后的所有小数位数。这也不依赖于您分配结果的变量的类型。查看doubleint main() { std::string buf; std::ifstream file; file.exceptions(std::ifstream::failbit | std::ifstream::badbit); try { file.open("C:\\Test11.txt"); char c; while (!(file.eof())) { file.get(c); std::cout << c; } } catch (std::ifstream::failure e) { std::cout << e.what() << std::endl; std::cout << e.code() << std::endl; std::cout << "Exception opening/reading file"; } file.close(); return 0; } 数据类型。