对于我的C++类,讲师说他将为所有带有幻数的程序给出零分。他说,即使对于诸如计算圆面积之类的公式(众所周知,3.14159是Pi的值,我们也应该使用const变量或#define指令来表示Pi,然后在公式中使用它)。

话虽如此,我正在进行财务计算,以确定税前的账单金额。该函数的摘要是:

mealCostBeforeTax = billAmount / (1.0 + taxRate_);
taxRate_是以小数百分比(例如0.08)传递给函数的参数。因此,为了确定税前的金额,我必须在taxRate上加1,使其等于1.08。

我的问题是,因为对讲师1.0是一个魔术数字。该值的合适名称是什么?

这也导致了另一个问题。当我使用公式时,是否有资源或方向可以帮助我理解函数中某些常量的含义或含义。

例如,将温度从摄氏温度转换为华氏温度时,公式为Tf =(9/5)* Tc + 32。如何找出9/5和32代表的含义。我认为32是华氏温度下水的冰点,但这只是一个猜测。我想像的9/5是音阶之间的某种比率,但这只是猜测。

抱歉,无法显示文字。但是我真的很想写一个彻底的问题,以便希望其他人会发现它有用。

最佳答案

总而言之,我认为将此公式中的1.0称为幻数有点极端。并非每个文字数字都一定是一个幻数。关键是使您的代码具有可读性,从而使查看代码的人不必猜测您为何凭空挑选该数字。

在这种情况下,我认为解决方案是将计算结果包装在一个函数中,而不是尝试为1定义#define。如果我看到另一个程序,其中有像#define one 1这样的语句,请上帝帮我,因为程序员遵循魔术数字规则的字母,而不是意图。

float getPreTaxCost(float totalCost, float taxRate);
{
  return totalAmount / (1.0 + taxRate);
}

尤其是对于将F转换为C的通用公式而言,这很有意义。根据经验,如果在计算中使用了明显的常量/定义名称,则一定要使用它而不是代码中的裸数。但是,请不要将问题推到极端。

当然,我会与您的教授确认这一假设。他们可能很荒谬,因为他们生活在理论中,而不是现实世界,并且常常要求遵守严格的规则,因为它们是忘记了背后原因的规则。他们。

10-07 19:29
查看更多