作为公式一部分的命名常量 P>对于我的C++类,老师说他会给任何用魔术数字提交的程序零分。他说,即使对于计算圆的面积这样的公式(众所周知,3.14159是Pi的值,我们也应该使用常量变量或#define指令来表示Pi,然后在公式中使用它)

作为公式一部分的命名常量 P>对于我的C++类,老师说他会给任何用魔术数字提交的程序零分。他说,即使对于计算圆的面积这样的公式(众所周知,3.14159是Pi的值,我们也应该使用常量变量或#define指令来表示Pi,然后在公式中使用它),c++,naming-conventions,C++,Naming Conventions,话虽如此,我在做一个财务计算,在这里我要确定税前账单的金额。函数中的snipet是: mealCostBeforeTax = billAmount / (1.0 + taxRate_); taxRate\uu是一个以十进制百分比(例如0.08)形式传递给函数的参数。因此,为了确定税前金额,我必须在税率上加1,使其为1.08 我的问题是,对于讲师来说,1.0是一个神奇的数字。该值的合适名称是什么 这也引出了另一个问题。当我使用公式时,有没有一个资源或方向可以帮助我理解函数中的某些常量被调用,或者

话虽如此,我在做一个财务计算,在这里我要确定税前账单的金额。函数中的snipet是:

mealCostBeforeTax = billAmount / (1.0 + taxRate_);
taxRate\uu
是一个以十进制百分比(例如0.08)形式传递给函数的参数。因此,为了确定税前金额,我必须在税率上加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,这才有意义。根据经验,如果计算中使用的常量/定义有一个明显的名称,那么一定要使用它,而不是代码中的一个裸数。但是,不要将问题推向极端


当然,我会和你的教授确认这个假设。。他们可能非常迂腐到荒谬的地步,因为他们生活在理论中,而不是现实世界中,并且经常要求遵守严格的规则,因为这些规则忘记了背后的原因。

如果在这种情况下,你的导师将1.0作为一个神奇的数字计算为零,你可能应该质疑你的导师的权威。这对程序员来说可能更好。stackexchange.Comi有没有办法将问题链接到该网站?或者我需要在那里重新发布吗?“我的问题是,因为对讲师来说,1.0是一个神奇的数字。”找一个新的讲师。如果任意选择一个数字,并且它的任何其他值都同样可以接受,那么这个数字就是“神奇的”(如
char buf[100]
)。另一方面,计算中的
1.0
完全不是任意的,因为它是使用百分比的基础。所以我真的不会称之为“神奇数字”。正如公认的答案所表明的,这些数字最好存储在适当的转换例程中(类似于摄氏-华氏转换器),但它们不是神奇的数字。热爱你的解决方案和解释。