获取十进制数c#的简单分数



我需要在c#中获得十进制数的简单分数

示例:

1 would be 1 /1
16 would be 16 / 1
0.125 would be 1 / 8
.30769231 would be 4/13

我找到的解决方案是:

Decimal_target= 0.1
In the numerator and denominator for the decimal values i used (Decimal_target*(random number between 1- 10)/random number)
The random number got was 9 so: ((0.1*9)/9)=0.1
Numerator = 0.9
Denominator = 9

但是分子和分母必须是整数

这是示例代码。可能会陷入无限循环(让OP解决这个问题(。我在输入中四舍五入到小数位数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] numbers = { "1", "16", "0.125", ".30769231" };
foreach (string number in numbers)
{
int numerator = 1;
string strNumerator = "";
int denominator = 1;
string strDenominator = "";

Boolean done = false;
if (!number.Contains("."))
{
strNumerator = number;
strDenominator = "1";
done = true;
}
else
{
int numberDecimalPlaces = number.Substring(number.IndexOf(".")).Length - 1;
string tempStr = number;
if (number.StartsWith(".")) tempStr = "0" + tempStr;
double value = double.Parse(number);
while(!done)
{
while (true)
{
double newTemp = numerator / (double)denominator;
string newTempStr = newTemp.ToString("F" + numberDecimalPlaces.ToString());
if (newTempStr == tempStr)
{
strNumerator = numerator.ToString();
strDenominator = denominator.ToString();
done = true;
break;
}
denominator++;
if (newTemp <= value)
{
numerator += 1;
denominator = numerator + 1;
break;
}
}
}
}
Console.WriteLine("Results for : '{0}', numerator = '{1}', denominator = '{2}'", number, strNumerator, strDenominator);
}
Console.ReadLine();
}
}
}

最新更新