Abi*_*Abi 3 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
Run Code Online (Sandbox Code Playgroud)
计算1,2和5的结果将得到一个简短的结果,没有句号或无穷无尽的数字串.计算3和4的结果非常长且复杂.
如何检查哪个计算是"简单计算"并给出"短"结果.
我试过这个并且肯定给出了错误的结果......就像你看到的那样,计算结果double在我的应用程序中有数据类型.
static bool IsInt(double x)
{
try
{
int y = Int32.Parse(x.ToString());
return true;
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望很清楚我在问什么.
Mar*_*ers 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;
}
Run Code Online (Sandbox Code Playgroud)
看到它在线工作:ideone
请注意,我将分子和分母分别传递给方法.如果先进行除法,然后将结果传递给方法,则由于浮点表示错误而导致精度损失.
同样对于生产代码,您应该检查它,b != 0因为它不允许除以0.如果没有检查,上面的代码将进入无限循环.