View Full Version : [java]tipi primitivi
Salve ragazzi,
chiedo a voi per non aspettare di chiedere al mio professore universitario e poi so che voi mi dareste una risposta migliore e più articolata =).
ho sviluppato un piccola applicazione in java con un interfaccia grafica molto semplice (qualche jtextfield e un jbutton) che svolge una funzione di elaborazione di dati matematici per restituirne degli altri.
dato che molti metodi implementati usano funzioni trigonometriche ho dei risultati con molti numeri dopo la virgola.
Come faccio a restringere il numero di decimali dopo la virgola?tipo a 3 o 4 :help:
Grazie per il vostro aiuto!:)
Puoi usare la System.out.printf. Guarda queste due prove:
float f = 21.4563f;
System.out.printf("21.4563 diventa: %.2f", f);
output: 21.4563 diventa: 21,46
float f = 21.4563f;
System.out.printf("21.4563 diventa: %.1f", f);
output: 21.4563 diventa: 21,5
EDIT: scusa mi sono accorto dopo che non hai specificato in fase di stampa e che inoltre usi un'interfaccia a finestre :D
nuovoUtente86
28-05-2010, 22:06
Ti basta moltiplicare (castizzando a int) e dividere (ritornando a double) il numero per (10^n) dove n è il numero di cifra da lasciare dopo la virgola.
Alternativamente, per evitare eventuali perdite di dati dovuti a possibili narrow, puoi utilizzare il metodo statico format di String, con le stesse modalità indicateti nel post precedente.
Ti basta moltiplicare (castizzando a int) e dividere (ritornando a double) il numero per (10^n) dove n è il numero di cifra da lasciare dopo la virgola.
Alternativamente, per evitare eventuali perdite di dati dovuti a possibili narrow, puoi utilizzare il metodo statico format di String, con le stesse modalità indicateti nel post precedente.
risolto come hai detto tu grazie.
in pratica ho fatto
double pippo=7.9999999999
pippo=pippo*100; //pippo=799.9999
pippo=(int)pippo; //pippo=799
pippo=(double)pippo*100 //pippo=7.99
(castizzando a int)
(ritornando a double)
Uccidetemi, qui e subito, che il mio corpo giaccia a fianco del cadavere dell'italiano.
Possano i Lancieri dell'Accademia della Crusca fare scempio di coloro che perpetrarono il putribondo assassinio.
Addio!
banryu79
31-05-2010, 08:19
Be', a me "ritornando a double" ha fatto sorridere quando l'ho letta, suonava un po' come il titolo di un nuovo film (sulla falsa riga di "Ritorno al futuro") :D
Condivido invece il "disgusto" nei confronti del verbo "castizzare"... :asd:
nuovoUtente86
31-05-2010, 10:47
Probabilmente sarebbe stato più freddo ed elegante scrivere 3 righe di codice, ma la persona avrebbe fatto, probabilmente, un "copia e incolla" poco significativo, senza realmente cogliere il senso di quelle istruzioni.
Ancora avrei potuto indicargli di fare una "conversione esplicita dal tipo double al tipo int", ma ne sarebbe risultata una frase stilisticamente impeccabile ma parimenti inefficace ai fini della discussione.
Del resto credo questo sia una sezione del forum dove si tratta di programmazione e non la purezza della lingua italiana.
Probabilmente sarebbe stato più freddo ed elegante scrivere 3 righe di codice, ma la persona avrebbe fatto, probabilmente, un "copia e incolla" poco significativo, senza realmente cogliere il senso di quelle istruzioni.
Ancora avrei potuto indicargli di fare una "conversione esplicita dal tipo double al tipo int", ma ne sarebbe risultata una frase stilisticamente impeccabile ma parimenti inefficace ai fini della discussione.
Del resto credo questo sia una sezione del forum dove si tratta di programmazione e non la purezza della lingua italiana.
Hai perfettamente ragione.
Ci ho messo un po a capire cosa dovessi fare ma almeno ho capito e molto probabilmente se mi avessi messo 3 righe di codice le avrei copiate!
Comunque meglio un italiano storto che si capisca cosa bisogni fare che un italiano perfetto incompressibile dal punto di vista della programmazione.
banryu79
31-05-2010, 11:43
@nuovoUtente86: mea culpa, avrei dovuto specificarlo in calce al post, ma si faceva solo un po' di facile ironia, tanto per sorridere un po'; questo senza voler togliere nulla alla bontà & utilità del tuo intervento nei confronti dell'utente.
nuovoUtente86
31-05-2010, 11:56
Ci mancherebbe, l' ironia ci deve essere e va benissimo. Va però anche detto che, spesso, risulta più utile l' utilizzo di termini tecnici storpiati nella nostra lingua, ma di utilizzo tecnico diffuso, piuttosto che parole fedelmente tradotte ma dalla scarsa contestualizzazione informatica.
Dai, su, non nascondiamoci dietro a un dito. L'aulico non interessa a nessuno ma che almeno sembri italiano!
Uno può usare termini stranieri in una frase, c'è una regola ad hoc secondo cui quei la parola o il verbo non devono essere declinati o coniugati.
Non dobbiamo necessariamente usare il termine "conversione" (sebbene non sia poi così male, sopratutto se consideriamo i termini "faldone" o "direttorio"). Puoi quindi "fare un cast a double" o fare "dei cast a double" (ma non dei casts).
Non possiamo inventarci delle parole - salvo certe figure metaforiche - ed è facile capire il perchè: la soluzione proposta è a rischio di rounderrorizzazione e quindi non può essere usata nei casi in cui la decimalificazione del flottante produca un valore non boundato.
Cosa si capisce? Si capisce che devo prenotare una visita dal logopedista.
Circa il "ritornare" è un fatto che i verbi di moto siano intransitivi: non ci si può fare molto. Intransitivi significa che non hanno la capacità di trasferire un significato ad un oggetto. Per i verbi di moto l'oggetto è un luogo.
Il caso del "ritornare a double" è particolare. L'essere intrasitivo comporta la necessità che esista una particella tra verbo ed oggetto. La particella c'è (a) ma l'oggetto non è un luogo.
Potremmo dire "ritornare a double" se "double" fosse l'argomento di un discorso, da intendersi come luogo figurato. "... e ritorniamo al [problema del/discorso del] double".
Per un programmatore tutto questo dovrebbe essere affascinante: è una delle tante grammatiche da conoscere.
anche se non è in argomento con il titolo ne con la discussione che si è venuta a creare sul linguaggio italiano-programmazione ve lo chiedo qui per evitare di aprire un altro topic
ho creato un jdialog e ho inserito un jbutton il quale in teoria dovrebbe chiudere la finestra senza dover andare a cliccare il tastino x in alto.
nel codice ho provato le seguenti implementazioni:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
con il codice implementato sopra il jbutton non fa niente e quindi la jdialog non si chiude
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
con il codice implementato sopra il jbutton mi chiude tutto il programma e non solo la jdialog ma proprio tutto.
ho provato a cercare altre soluzioni ma non le ho trovate
ora mi resta sperare che qualcuno di voi mi possa dare una mano per risolvere questo problema
grazie
banryu79
01-06-2010, 08:57
ho creato un jdialog e ho inserito un jbutton il quale in teoria dovrebbe chiudere la finestra senza dover andare a cliccare il tastino x in alto.
nel codice ho provato le seguenti implementazioni:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
Il metodo setDefaultCloseOperation serve appunto per determinare il comportamento standard di chiusura che la dialog terrà quando viene generato e processato il WindowEvent caraterrizzato dall' ID noto come WINDOW_CLOSING.
Direttamente dai javadoc di JDialog:
Sets the operation that will happen by default when the user initiates a "close" on this dialog. You must specify one of the following choices:
* DO_NOTHING_ON_CLOSE (defined in WindowConstants): Don't do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object.
* HIDE_ON_CLOSE (defined in WindowConstants): Automatically hide the dialog after invoking any registered WindowListener objects.
* DISPOSE_ON_CLOSE (defined in WindowConstants): Automatically hide and dispose the dialog after invoking any registered WindowListener objects.
The value is set to HIDE_ON_CLOSE by default
con il codice implementato sopra il jbutton non fa niente e quindi la jdialog non si chiude
Il motivo dovrebbe ora esserti chiaro: con il codice sopra non comandi alla dialog di chiudersi, le dici invece che comportamento dovrà tenere quando dovrà chiudersi.
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
con il codice implementato sopra il jbutton mi chiude tutto il programma e non solo la jdialog ma proprio tutto.
Questo perchè la chiamata a System.exit() "uccide" la virtual machine.
Anche di questo si trova traccia nei javadoc.
Ora, ci sono diversi modi per impostare un bottone che deve chiudere la finestra in cui risiede.
Presumendo che 'dialog' sia l'istanza della tua JDialog e che 'btClose' sia l'istanza del JButton contenuto in essa, un metodo è quello di invocare setVisible(false) per nasconderla e dispose() per "distruggerla" (vengono rilasciate le risorse native neccessarie per la sua proiezione grafica):
btClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
Con il sistema qui sopra però forzi la "distruzione" della dialog, e non è detto che questo comportamento sia desiderabile (perchè, ad esempio, avevi impostato una diversa politica di chiusura della dialog con setDefaultCloseOperation, e vorresti che venisse rispettata anche alla pressione del tuo bottone).
Si potrebbe quindi fare in modo che alla pressione del bottone venga generato quello specifico evento che scatena la chiusura della dialog, secondo la sua specifica politica di chiusura. E' un WindowEvent caratterizzato da due oggetti: la "sorgente" dell'evento è la dialog stessa che deve chiudersi, e l'"identificatore" dell'evento è la costante WindowEvent.WINDOW_CLOSING. L'evento va generato e infilato nella coda degli eventi, in modo che venga processato appena possibile:
btClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
WindowEvent closing = new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)
dialog.dispatchEvent(closing);
}
});
Il metodo setDefaultCloseOperation serve appunto per determinare il comportamento standard di chiusura che la dialog terrà quando viene generato e processato il WindowEvent caraterrizzato dall' ID noto come WINDOW_CLOSING.
Direttamente dai javadoc di JDialog:
Il motivo dovrebbe ora esserti chiaro: con il codice sopra non comandi alla dialog di chiudersi, le dici invece che comportamento dovrà tenere quando dovrà chiudersi.
Questo perchè la chiamata a System.exit() "uccide" la virtual machine.
Anche di questo si trova traccia nei javadoc.
Ora, ci sono diversi modi per impostare un bottone che deve chiudere la finestra in cui risiede.
Presumendo che 'dialog' sia l'istanza della tua JDialog e che 'btClose' sia l'istanza del JButton contenuto in essa, un metodo è quello di invocare setVisible(false) per nasconderla e dispose() per "distruggerla" (vengono rilasciate le risorse native neccessarie per la sua proiezione grafica):
btClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
Con il sistema qui sopra però forzi la "distruzione" della dialog, e non è detto che questo comportamento sia desiderabile (perchè, ad esempio, avevi impostato una diversa politica di chiusura della dialog con setDefaultCloseOperation, e vorresti che venisse rispettata anche alla pressione del tuo bottone).
Si potrebbe quindi fare in modo che alla pressione del bottone venga generato quello specifico evento che scatena la chiusura della dialog, secondo la sua specifica politica di chiusura. E' un WindowEvent caratterizzato da due oggetti: la "sorgente" dell'evento è la dialog stessa che deve chiudersi, e l'"identificatore" dell'evento è la costante WindowEvent.WINDOW_CLOSING. L'evento va generato e infilato nella coda degli eventi, in modo che venga processato appena possibile:
btClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
WindowEvent closing = new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)
dialog.dispatchEvent(closing);
}
});
Grazie, la tua esauriente spiegazione mi ha fatto reso la vita più semplice!
ero disperato non volevo togliere il pulsante che mi chiudesse la finestra ma non sapevo come riuscire a fargli chiudere la finestra.
ho cercato all'interno del javadoc ma si vede che non mi sono spinto troppo dentro da riuscire a capire il tutto
capitemi sono al primo anno di ingegneria informatica!=)
banryu79
01-06-2010, 17:32
ho cercato all'interno del javadoc ma si vede che non mi sono spinto troppo dentro da riuscire a capire il tutto
I javadoc si impara ad aprezzarli e conoscerli con il tempo, logicamente.
Però questi sono solo la documentazione delle API; forse all'inizio è più pratico documentarsi con i Sun Java Tutorial.
A questa pagina trovi il "really big index" (http://java.sun.com/docs/books/tutorial/reallybigindex.html): se lo scorri rapidamente (senza farti venire la tendinite, la pagina è lunga) vedrai che contiene una bella quantità di informazioni su moltissimi aspetti della tecnologia Java: tienteli sempre sotto mano ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.