我正在创建一个程序,孩子们必须将小数值(I.E. 0.xxxx - precision 4)转换为分数。
我需要知道分数是否终止,我的意思是:
1/9 ~ 0.111
但111/1000 = 0.111
我正在创建Fraction
课程,但我不知道如何区分这两种情况。
public class Fraction
{
#region Fields
private int _numerator;
private int _denominator;
#endregion
#region Properties
public int Numerator
{
get { return _numerator;}
set { _numerator = value;}
}
public int Denominator
{
get { return _denominator;}
set { _denominator = value;}
}
public decimal DecimalValue
{
get { return (decimal)_numerator / _denominator; }
}
#endregion
#region Constructors
public Fraction() { }
public Fraction(int numerator, int denominator)
{
this.Numerator = numerator;
this.Denominator = denominator;
}
#endregion
}
你能帮帮我吗?
提前谢谢。
答案 0 :(得分:11)
找出分母的素因子化。
如果所有素数因子都是2或5,则它将具有有限的十进制表示。
如果它的素数因子不是2或5,那么它将是一个重复的小数。
(这是因为10的素因子是2和5。)
编辑 - 并检查numerator % denominator
是否为0,正如Stefan H指出的那样。
答案 1 :(得分:3)
我没有对此进行详尽的分析来证明或反驳以下内容,但是从我的头脑中看,以下内容似乎适用于整数......
如果没有剩余部分,那么您无需担心问题。 如果有一个余数且分母具有2和5之外的因子,那么你将有一个重复的分数。
如果分母是小数,则可能需要稍微调整一下这些规则。
希望这有帮助。
答案 2 :(得分:0)
如果我正确解释,您希望将分数转换为重复小数,并且您在计算重复部分时遇到问题。