如何简化C#中的分数?

我正在寻找一个库或现有代码来简化分数。

有没有人有任何手头或任何链接?

PS我已经理解了这个过程但是真的不想重写这个轮子

更新

好吧,我已经检查了CodeProject上的分数库但是我遇到的问题比简化分数有点小问题。

我必须减少百分比 ,可能是20%/ 50%/ 30%(总是等于100%)

我想你只需要除以所有数字的GCD。

void Simplify(int[] numbers) { int gcd = GCD(numbers); for (int i = 0; i < numbers.Length; i++) numbers[i] /= gcd; } int GCD(int a, int b) { while (b > 0) { int rem = a % b; a = b; b = rem; } return a; } int GCD(int[] args) { // using LINQ: return args.Aggregate((gcd, arg) => GCD(gcd, arg)); } 

我没有尝试过代码,但看起来很简单(假设你的数字都是正整数而你没有传递一个空数组)。

您可以使用Microsoft.FSharp.Math.BigRational,它位于免费的F#Power Pack库中。 虽然它取决于F#(免费提供并包含在VS2010中),但它可以在C#中使用。

 BigRational reduced = BigRational.FromInt(4)/BigRational.FromInt(6); Console.WriteLine(reduced); 2/3 Console.WriteLine(reduced.Numerator); 2 Console.WriteLine(reduced.Denominator); 3 

自定义解决方案:

 void simplify(int[] numbers) { for (int divideBy = 50; divideBy > 0; divideBy--) { bool divisible = true; foreach (int cur in numbers) { //check for divisibility if ((int)(cur/divideBy)*divideBy!=cur){ divisible = false; break; } } if (divisible) { for (int i = 0; i < numbers.GetLength(0);i++ ) { numbers[i] /= divideBy; } } } } 

用法示例:

 int [] percentages = {20,30,50}; simplify(percentages); foreach (int p in percentages) { Console.WriteLine(p); } 

Outupts:

 2 3 5 

顺便说一句,这是我的第一个c#程序。 认为尝试一种新语言只是一个有趣的问题,现在我爱上了! 它就像Java,但我希望的一切都与我想要的完全不同

<3 c#


编辑:顺便说一下,如果它是您的Main类,请不要忘记将其设为静态无效。

这个库看起来可能是你需要的:

 var f = new Fraction(numerator, denominator); numerator = f.Numerator; denominator = f.Denominator; 

虽然,我还没有对它进行测试,所以看起来你可能需要玩它才能让它发挥作用。

我见过的Fraction(aka Rational)的最好例子是Timothy Budd的“C ++中的经典数据结构” 。 他的实施非常好。 它包括一个简单的GCD算法实现。

应该很难适应C#。