3

我需要知道如何执行此程序。

calculation1: 1/4 = 0,25
calculation2: 1/8 = 0,125
calculation3: 47/183 = 0,25683060109289617486338797814207......
calculation4: 58/889 = 0,06524184476940382452193475815523......
calculation5: 1/5 = 0,2

计算 1、2 和 5 的结果将给出一个简短的结果,没有句点或无休止的数字串。计算 3 和 4 的结果非常长且复杂。

如何检查哪个计算是“简单的”并给出“短”的结果。

我试过了,它肯定给出了错误的结果......如您所见,计算结果double在我的应用程序中具有数据类型。

static bool IsInt(double x)
    {
        try
        {
            int y = Int32.Parse(x.ToString());
            return true;
        }
        catch
        {
             return false;
        }
    }

我希望很清楚我在问什么。

4

2 回答 2

16

如果在尽可能减少分数后,分母可以表示为 2 的幂乘以 5 的幂,则十进制表示终止。否则它会无限重复。

您可以测试您的部门是否“好”,如下所示:

public bool IsGoodDivision(int a, int b)
{
    while (b % 2 == 0) { b /= 2; }
    while (b % 5 == 0) { b /= 5; }
    return a % b == 0;
}

在线查看它:ideone

请注意,我将分子和分母分别传递给该方法。如果您先进行除法,然后将结果传递给您的方法,则会因浮点表示错误而失去精度。

同样对于生产代码,您应该检查它,b != 0因为它不允许除以 0。如果没有检查,上面的代码将进入无限循环。

于 2012-08-23T18:23:56.560 回答
1

我想这取决于您对“好结果”或“容易”的定义。但我认为你想要的是Modulus Operator

于 2012-08-23T18:23:51.710 回答