我需要将十进制值转换为小数当量,类似于此previous question。
我正在使用其中一个答案中发布的代码作为起点,因为它主要完成了我需要它做的事情。
string ToMixedFraction(decimal x) {
int whole = (int) x;
int denominator = 64;
int numerator = (int)( (x - whole) * denominator );
if (numerator == 0)
{
return whole.ToString();
}
while ( numerator % 2 == 0 ) // simplify fraction
{
numerator /= 2;
denominator /=2;
}
return string.Format("{0} {1}/{2}", whole, numerator, denominator);
}
正如我所说,这段代码在大多数情况下工作正常,但我需要采用常见的重复十进制值(.3333333)并将其显示给用户为1/3。
有没有人碰巧知道这可能是怎么做的?
答案 0 :(得分:4)
来自http://mathforum.org/library/drmath/view/61579.html
将重复部分中的位数作为分子,以相同的位数重复9次并减少分数。
例如,.3重复与3/9相同。通过将gcd(在这种情况下为3)除以两边来减少并得到1/3。
如果你可以从终止小数中提取重复小数,你需要做一些额外的数学运算,例如: 0.133333333。
答案 1 :(得分:3)
我在中学学到的技巧:
x = 0.33333
10 x = 3.33333
10x - x = 3.3333 - .3333
9x = 3
x = 3 / 9
Reduce 3/9 to 1/3.
答案 2 :(得分:0)
这是一个将浮动转换为最小分数的配方,给出分母的限制:http://code.activestate.com/recipes/52317/