c# - 如何检查 C# 中的数字是否可整除?

标签 c# math floating-point double division

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

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;
        }
    }

我希望我问的很清楚。

最佳答案

如果尽可能减少分数后,分母可以表示为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

请注意,我将分子和分母分别传递给该方法。如果您先进行除法,然后将结果传递给您的方法,则由于浮点 representation error 而失去精度.

对于生产代码,您还应该检查 b != 0,因为不允许除以 0。如果不检查,上述代码将进入无限循环。

关于c# - 如何检查 C# 中的数字是否可整除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12097805/

相关文章:

math - 如何计算圆内截然相反的点?

python - 如何解决Python中 float 的表示错误?

c# - 如何将 NUnit 的 EqualTo().Within() 约束与自定义数据类型一起使用?

WHERE 子句中的 SQL Server 浮点

c# - 如何使用Dapper获取存储过程的返回值?

math - 找到圆上的切点?

c# - 如何在 LINQ 中对单个连接中的多个字段进行左连接

Java 对数 log(num, base)(已关闭)

c# - 阻塞直到事件完成

c# - 为登录服务器加密 TcpStream - 有必要吗?