PDA

View Full Version : [Java] Da virgola mobile a razionale


jdluk87
12-03-2009, 10:05
Salve a tutti, qualcuno sa come convertire un numero da virgola mobile in razionale, quindi ad esempio 0,3periodico -->1/3 ???

Grazie a tutti per l'aiuto

MarcoGG
15-03-2009, 17:26
C'ho provato adesso ! :D

Vabbeh, è C#, insomma col Java siamo lì... ;)

lst_tentativi.Items.Clear();
lst_tentativi.Visible = false;

// numero massimo di cifre decimali da considerare
int maxNumCifreDec = 14;

string strNumero = txt_numeroinput.Text;
string[] partiNumero = strNumero.Split(',');
string strPIntNumero = partiNumero[0];
string strPDecNumero = partiNumero[1];

if (strPDecNumero.Length > maxNumCifreDec)
{
strPDecNumero = strPDecNumero.Substring(0, maxNumCifreDec);
}
double numero = Convert.ToDouble(strPIntNumero + "," + strPDecNumero);

double risTemp = 0;
string strRisTemp;
string[] partiRisultato;
string strPIntRisult;
string strPDecRisult;
double numTemp = 1;
double denomTemp = 1;

do
{
risTemp = numTemp / denomTemp;
strRisTemp = risTemp.ToString();
partiRisultato = strRisTemp.Split(',');
strPIntRisult = partiRisultato[0];

try
{
strPDecRisult = partiRisultato[1];
}
catch (Exception)
{
//throw;
strPDecRisult = "0";
}

if(strPDecRisult.Length > maxNumCifreDec)
{
strPDecRisult = strPDecRisult.Substring(0, maxNumCifreDec);
}
risTemp = Convert.ToDouble(strPIntRisult + "," + strPDecRisult);
lst_tentativi.Items.Add(numTemp + " / " + denomTemp + " = " + risTemp);

if(risTemp == numero)
{
txt_risnum.Text = numTemp.ToString();
txt_risdenom.Text = denomTemp.ToString();
break;
}
else if ( risTemp > numero )
{
denomTemp += 1;
}
else
{
numTemp += 1;
}

} while (true);

lst_tentativi.Visible = true;
txt_numeroinput = textbox numero input
txt_risnum = textbox numeratore output
txt_risdenom = textbox denominatore output

Riduce anche ai minimi termini... ;)