将x.y转换为a / b,其中x.y = a / b c#

时间:2014-11-23 09:33:25

标签: c#

好吧,我找不到合适的词来搜索这个,所以我道歉,如果它太容易了

我想将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; \}

2 个答案:

答案 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);     
                }       
            }       
        }       
    }
}