好吧,我找不到合适的词来搜索这个,所以我道歉,如果它太容易了
我想将0.142857之类的数字转换为1/7,同时注意我只有15位精度或者换句话说3.333333333333333是10/3(这在数学上是错误的,但实际上已经足够精确了)
只是我做了一些指标和机器人计算,我最终得到了像
这样的东西{-0.16271186440678; 0.111864406779661; 0.0474576271186441; \
0.0915254237288136; -0.125423728813559; 0.0983050847457627; \
0.159322033898305; 0.0779661016949152; -0.088135593220339; \}
虽然我真的更喜欢以
结束{-48/295; 33/295; 14/295; \
27/295; -37/295; 29/295; \
47/295; 23/295; -26/295; \}
答案 0 :(得分:3)
使用codeproject中的Fraction类:
frac=new Fraction("6.25"); // we'll get 25/4
答案 1 :(得分:1)
您要搜索的内容是将Decimal
转换为Fraction
。简单的方法是在转换为整数之前,以浮点(或十进制)进行计算。以下是您可以做的一个示例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DecimalToFraction
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 1000; i++)
{
decimal decimalValue = i / 1000m;
double doubleValue = i / 1000.0;
decimal numeratorDecimal = Math.Round(decimalValue * 1000m / 125m);
int numeratorFloat = (int) Math.Round(doubleValue * 1000.0 / 125.0);
int numeratorInt = (int)(doubleValue * 1000) / 125;
if (numeratorFloat != numeratorInt ||
numeratorFloat != numeratorDecimal ||
numeratorInt != numeratorDecimal)
{
Console.WriteLine("{0,5}: Floating point: {1} Integer: {2} Decimal: {3}",
i, numeratorFloat, numeratorInt, numeratorDecimal);
}
}
}
}
}