Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [J2ME] package math impazzito?!?

    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:

    codice:
    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???

  2. #2
    up

  3. #3
    Hai provato magari a controllare se

    codice:
    Math.toRadians(Angolo);
    converte in valori sbagliati o giusti? Tanto per fare un controllo...
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    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.

  5. #5
    ma lo sai che c'hai ragione ?? VVoVe: VVoVe:
    e come lo faccio? si potrebbero avere valori + precisi? in fondo anche sin(30) mi da 0.499999999999 ect

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    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

  7. #7
    senza usare bigdecimal, non potrei fare
    codice:
    a=((int)a*100000000000)/100000000000
    ??
    Solo che è un pò macchinoso...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.