表格中的C#分数计算器

时间:2018-09-08 14:09:47

标签: c# forms math

我正在尝试制作C#形式的分数计算器。

我只是无法正确计算数学 这是表格 My Form

我希望它能够计算结果。 当您输入10/5和10/7时,结果应为3 3/7 或者像这样 How the result should be

我得到了什么 My result

这是我的代码

svg.selectAll("path")
  .data(data_tri)
  .enter().append("path")
  .attr("class", "point")
  .attr("d", d3.svg.symbol().type("triangle-up")() )
  .attr("transform", function(d) { return "translate(" + d[0] + "," + d[1] + ")"; });

svg.selectAll("path")
  .data(data_crs)
  .enter().append("path")
  .attr("class", "point")
  .attr("d", d3.svg.symbol().type("cross")() )
  .attr("transform", function(d) { return "translate(" + d[0] + "," + d[1] + ")"; });

2 个答案:

答案 0 :(得分:0)

我看不出您的逻辑是否正确,但我看到第一个问题->可能来自相等的检验:Ekstra_greatnes ==整个

很难比较两倍,

您可以尝试使用以十进制表示法存储数字的十进制类型。因此0.1可以精确表示 或者您可以使用(在Microsoft网站上看​​到的)ε值来比较两个值:

// Initialize two doubles with apparently identical values
double double1 = .333333;
double double2 = (double) 1/3;
// Define the tolerance for variation in their values
double difference = Math.Abs(double1 * .00001);

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(double1 - double2) <= difference)
   Console.WriteLine("double1 and double2 are equal.");
else
   Console.WriteLine("double1 and double2 are unequal.");

答案 1 :(得分:0)

我建议将分子和分母分开存储。最好是为此目的创建一个新的结构Fraction。然后,您可以使用euclidian algorithm来计算最大公约数。有了这些信息,您就可以格式化结果。

string FormatFraction(int numerator, int denominator)
{
    int gcd = Gcd(numerator, denominator );
    numerator /= gcd;
    denominator /= gcd;
    return $"{numerator/denominator} {Math.Abs(numerator/denominator)}";
}

int Gcd(int numerator, int denominator)
{
    int a = Math.Abs(numerator);
    int b = Math.Abs(denominator);
    while (b != 0)
    {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

此代码示例假定,您正在使用支持字符串插值的C#版本($“ ”)。如果没有,则可以用字符串串联替换格式分数的最后一行。

要添加两个分数a = a_1 / a_2b = b_1 / b_2,可以使用简单公式a + b = c = c_1 / c_2 = a_1 * b_2 + a_2 * b_1 / a_2 * b_2