Paul,
quite simple math --
1. multiple the double by the base - 32 in your case, to get the numerator.
2. set the denominator to 32.
3. use Euclid's algorithm to find GCD.
4. divide numerator and denominator by GCD...
See Knuth, Vol1, page 2 for details of Euclid's algorithm - it is a trivial
iterative search method
here is quick hack in case you don't have Knuth handy...
regards
roy fine
namespace GCDExample{
class Class1{
static int GCD(int numer, int denom){
while(true){
int rem = denom%numer;
if(rem == 0) return numer;
denom = numer;
numer = rem;
}
}
static void RunTest(double dbVal){
int numerator = (int)(dbVal * 32);
int denominator = 32;
int gcd = GCD(numerator,d enominator);
numerator /= gcd;
denominator /= gcd;
Console.WriteLi ne("double val:{0}\n numerator: {1}\n denominator:
{2}\n\n",dbVal, numerator,denom inator);
}
static void Main(string[] args){
RunTest(0.0625) ;
RunTest(0.09375 );
RunTest(0.25);
RunTest(0.50);
RunTest(0.75);
RunTest(0.9375) ;
RunTest(0.96873 );
RunTest(0.96874 );
RunTest(0.96875 );
RunTest(0.96876 );
RunTest(0.96877 );
RunTest(0.96878 );
RunTest(0.96879 );
RunTest(0.96880 );
}
}
}
"paul gao via .NET 247" <an*******@dotn et247.com> wrote in message
news:%2******** ********@TK2MSF TNGP11.phx.gbl. ..
hi all.
In my program I need to convert a double number to string representation in
fraction format and vise versa. For example, convert 0.75 to string "3/4"
and convert string "1/2" to 0.5. The class will only need to handle numbers
that increment by 1/32. That is 1/32, 2/32, 3/32.... 31/32, 1. If the double
number is 0.28 which is between 1/4 and 9/32, the string should be 9/32(go
with the bigger number).
TIA
--------------------------------
From: paul gao
-----------------------
Posted by a user from .NET 247 (
http://www.dotnet247.com/)
<Id>ReuzASqUkEC Hu6connty0g==</Id>