PDA

Visualizza la versione completa : [JAVA] J2ME: package Math e formattazione valori


gygabyte017
23-12-2005, 13:24
Il seguente codice dovrebbe fare in modo che qualdo la textfield EdAngolo cambia, la textfield Edseno viene aggiornata con il valore del seno dell'angolo:



public void itemStateChanged(Item item)
{
if (item == EdAngolo)
{
double Seno;
double Angolo = Double.parseDouble(get_EdAngolo().getString());
Seno = Math.sin(Math.toRadians(Angolo));
String sSeno = Double.toString(Seno);
if (sSeno.length()>12)
sSeno = sSeno.substring(0,12);
get_EdSeno().setString(sSeno);

}
}

Il problema che i valori scritti nella EdSeno non sono "veri"
Ad esembio inserendo 45 viene 0.701etc che esatto, inserendo 0 viene 0 che esatto, ma inserendo 180 viene -1.8etc (che impossibile, < di -1 ?!?), inserendo 720 viene 1.6etc che ancora impossibile...

Ma che succede??? Ho sbagliato io o no???

gygabyte017
23-12-2005, 21:18
up :dh: :dh:

Matteo982
24-12-2005, 10:19
Hai provato magari a controllare se


Math.toRadians(Angolo);

converte in valori sbagliati o giusti? Tanto per fare un controllo...

FelixR
24-12-2005, 11:18
A me il seno di 180 da 1.2246467991473532E-16.
Solo che siccome tu lo tagli al 12 carattere non ti accorgi che quel valore elevato a -16, praticamente 0.

Devi fare un arrotondamento e risolvi.
Ciao.

gygabyte017
24-12-2005, 12:35
ma lo sai che c'hai ragione ?? :oVVoVe: :oVVoVe:
e come lo faccio? si potrebbero avere valori + precisi? in fondo anche sin(30) mi da 0.499999999999 ect

FelixR
24-12-2005, 16:12
devi approssimarli alla seconda cifra decimale o fino a quanto ti serve. Non mi sono mai interessato di arrotondamenti, quindi non conosco il package, ma nella classe Math non vedo niente che restituisca un float.
Forse puoi arrangiarti con BigDecimal c' una funzione per spostare la virgola movePointRight() e movePointLeft(). Sposti la virgola di n posti a destra, arrotondi a intero e risposti la virgola a sinistra.

Ovviamente cerca prima altri metodi, io ti ho detto la prima che mi venuta in mente, ce ne saranno altri.
Ciao

gygabyte017
24-12-2005, 16:29
senza usare bigdecimal, non potrei fare

a=((int)a*100000000000)/100000000000 ??
Solo che un p macchinoso...

Loading