我已经知道一个分数是重复小数.这是功能.
public bool IsRepeatingDecimal
{
get
{
if (Numerator % Denominator == 0)
return false;
var primes = MathAlgorithms.Primes(Denominator);
foreach (int n in primes)
{
if (n != 2 && n != 5)
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正试图获得重复的数字.我正在查看这个网站:http://en.wikipedia.org/wiki/Repeating_decimal
public decimal RepeatingDecimal()
{
if (!IsRepeatingDecimal) throw new InvalidOperationException("The fraction is not producing repeating decimals");
int digitsToTake;
switch (Denominator)
{
case 3:
case 9: digitsToTake = 1; break;
case 11: digitsToTake = 2; break;
case 13: …Run Code Online (Sandbox Code Playgroud) 我只需要知道如何在浮点数中检测重复的十进制扩展.
例:
0.123456789123456789
该数字的重复部分为123456789.
我想用C#自动化这个,有没有智能解决方案?
C#decimal类型存在此问题:
Console.WriteLine( 1m/3 + 1m/3 == 2m/3 );
False
Run Code Online (Sandbox Code Playgroud)
它只能在除以2或5时才能准确表示数字,否则结果可能是重复的十进制数.
正如Stack Overflow之前所提到的(C#Rational算术),实现了存储两个小数,分子和分母,并且完全执行乘法和除法的东西.它可以在需要时使用Euclid算法简化分数.还应实现一些显式转换为double或decimal.
这里和这里提供了一些合理的商数实现.还有一个Microsoft Solver Foundation结构Rational.
如何decimal在C#中实现,是否可以复制此实现并修改它以处理重复的 decimal s?