好的,这是我的问题,我有这个代码:
decRatio = _intNumofRooms /intTotal;
if (decRatio > 1/6) {
MessageBox.Show("There can't be more than six people in the same room!", "Trump's Hotel", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtNumOfChildren.Focus();
return false;
}
return true;
我有一间酒店,每间客房仅接待6名成人。成年人(总计)现在我试图将房间数除以我需要多少成年人的比例,然后如果比例大于1/6,我试图显示该消息框要求他们进入在一个房间里不超过六个人的数量,但继续得到dividebyzeroexception错误。有这样的比例的另一种方式或我如何解决这个问题?
答案 0 :(得分:7)
整数除法在C#中生成一个整数。 1/6
是两个整数的除法,因此它产生零。如果你想制作分数,那么在双打中进行数学运算:
double ratio = (double)numberOfRooms / (double)total;
if (ratio > 1.0 / 6.0) ...
我不知道这是否导致你的零除错误,但你发布的代码显然是错误的,所以先修复它。
另外,不要根据它们的类型在C#中命名。它不是intNumberOfRooms
。它是numberOfRooms
。它不是intTotal
,而是totalNumberOfGuests
。
另外,你的数学是完全错误的。假设有六个人和六个房间。这是6/6的比率,大于1/6,这是违反政策的吗?你完全倒退了。
你最好完全避免比率。你可以用这样的整数来完成工作:
if (totalNumberOfGuests > 6 * totalNumberOfRooms) ...
如果你可以做乘法,不要进行除法。
下一步:您已将用户界面与业务政策代码混为一谈。假设您决定将限制从六个更改为五个;您需要更改代码中的多少个位置?您不仅要更改数学,还要更改错误字符串。将此逻辑封装到一个函数中,该函数确定是否违反了策略,如果是,则应该是什么消息。将您的业务政策代码远离与您的用户界面代码保持一致。您能看到如何重新组织代码以更好地区分您的问题吗?
最后,在你再次发布之前,你应该读到这个:
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/
如果您有关于代码的特定问题,请回来。 “我写了一个我无法修复的错误程序”不是问题。