制作代表分数的类

时间:2009-11-07 05:00:51

标签: c# math

设计此对象时需要考虑的一些事项 这就是我能想到的全部

int nominator
int denominator
int sign

此对象可用于数学运算

5 个答案:

答案 0 :(得分:2)

除非你使用unsigned int并且你确定你不希望分母和分子包含符号,否则你应该摆脱第三个成员(符号),因为它是多余的。

然后它取决于你正在使用的语言,你可能想要为这个类(C ++)重载一些运算符,或者实现计算行为的方法,比如Rohith说。

答案 1 :(得分:1)

考虑班级的行为。您希望在此分数类上执行哪些操作?

  • 创建它 - 这意味着构造函数。那么构造函数应该采用什么参数呢? 2个整数?标志的2个整数和布尔值?整体也可能带有迹象。
  • 添加两个分数,减去,乘,除 - 你想要这些是静态方法还是对象方法[aFraction.Add(anotherFraction)或Fraction.Add(aFraction,anotherFraction)]。这些方法返回什么 - 一个Fraction对象?一个浮动?
  • 你如何比较两个分数相等?如果您想在不破坏封装的情况下执行此操作,请确保提供equals方法 - Java和C#具有equals方法的特定签名。

答案 2 :(得分:1)

考虑以下乘法问题:

2/3 * 3/4。答案是6/12,天真。但1/2,聪明。你需要考虑到这一点来处理平等问题。

现在,2000000000/3000000000 * 3/4怎么样?如果你使用32位整数来表示你的分子和分母,如果你先进行天真计算,你就会溢出。当然,如果你的语言支持bignums,这不是一个大问题。

当你减少到最低项时,不要忘记考虑结果的符号 - 通常,在表示负理性时,决定选择分子或分母中的一个为负数,并坚持使用它。

答案 3 :(得分:1)

您可能还需要一个成员函数来输出十进制值和一个toString函数,这样您就可以毫不费力地打印分子/分母。

这里也有一个“边界”的情况 - 分母不能为零或者你的值是不确定的。你的构造函数和任何setter都需要回应这种可能性。

答案 4 :(得分:1)

Timothy Budd的"Classic Data Structures In C++"第2章在C ++中有一个非常好的Rational类。它包括这里提出的所有要点,包括将6/12标准化为1/2的GCD的实现。非常值得一读。