我正在为客户开发一款应用。它应该从控制台获得一些输入,如总餐价;另外,第二行应询问提示百分比。第三个会要求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();
答案 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
运算符是整数除法,如果其操作数是整数类型。它将截断句点后的所有小数位数。这也不依赖于您分配结果的变量的类型。查看double
或int 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;
}
数据类型。