Discussione:
Arrotondamento Double
(troppo vecchio per rispondere)
Paolo Marra
2007-11-27 09:06:29 UTC
Permalink
Ciao a tutti, ho un piccolo problema al quale spero possiate dare una
soluzione.
Io ho una serie di variabili Double, ma ho la necessita' che le cifre
decimali siano al piu' 2.
C'e' qualche metodo che permette di fare l'arrotondamento?
Math.round non fa al caso mio purtroppo!
Qualcuno ha qualche idea?
Grazie
Paolo
Manuel T
2007-11-27 09:23:17 UTC
Permalink
Post by Paolo Marra
Io ho una serie di variabili Double, ma ho la necessita' che le cifre
decimali siano al piu' 2.
Qualcuno ha qualche idea?
Moltiplicare per 100, troncare, dividere per 100 ?
robyc
2007-11-28 08:44:18 UTC
Permalink
prova ad usare il DecimalFormat

prova ad eseguire questo esempio e adatta i vari formati a seconda
delle tue esigenze

final String formato="###000"; //toglie i decimali
final String formato2="###0.00";//arrotonda con 2 decimali
NumberFormat formatter = new DecimalFormat(formato2);
String result = formatter.format(123.237654534234343);
System.out.println("RESULT: "+result);
Manuel T
2007-11-28 12:36:21 UTC
Permalink
Post by robyc
prova ad usare il DecimalFormat
prova ad eseguire questo esempio e adatta i vari formati a seconda
delle tue esigenze
final String formato="###000"; //toglie i decimali
final String formato2="###0.00";//arrotonda con 2 decimali
NumberFormat formatter = new DecimalFormat(formato2);
String result = formatter.format(123.237654534234343);
System.out.println("RESULT: "+result);
Non per fare il rompipalle, ma formattare un risultato non equivale ad
arrotondarlo.
robyc
2007-11-29 08:22:55 UTC
Permalink
Post by Manuel T
Post by robyc
prova ad usare il DecimalFormat
prova ad eseguire questo esempio e adatta i vari formati a seconda
delle tue esigenze
final String formato="###000"; //toglie i decimali
final String formato2="###0.00";//arrotonda con 2 decimali
NumberFormat formatter = new DecimalFormat(formato2);
String result = formatter.format(123.237654534234343);
System.out.println("RESULT: "+result);
Non per fare il rompipalle, ma formattare un risultato non equivale ad
arrotondarlo.
hai perfettamente ragione, ma come vedi in maniera molto semplice e
agendo sul tipo di formattazione ottieni il risultato voluto.
Jack
2007-11-29 09:09:49 UTC
Permalink
Post by robyc
hai perfettamente ragione, ma come vedi in maniera molto semplice e
agendo sul tipo di formattazione ottieni il risultato voluto.
non e' vero! se lui vuole fare i calcoli con 2 cifre decimali non puo'
formattare solo il risultato finale, deve mantenere a 2 cifre decimali
anche risultati dei i calcoli intermedi altrimenti il risultato finale
esce "sbagliato".

Ciao Jack
robyc
2007-11-29 11:48:57 UTC
Permalink
Post by Jack
Post by robyc
hai perfettamente ragione, ma come vedi in maniera molto semplice e
agendo sul tipo di formattazione ottieni il risultato voluto.
non e' vero! se lui vuole fare i calcoli con 2 cifre decimali non puo'
formattare solo il risultato finale, deve mantenere a 2 cifre decimali
anche risultati dei i calcoli intermedi altrimenti il risultato finale
esce "sbagliato".
Ciao Jack
certamente questo è solo un esempio lui deve poi adattarlo al suo
codice, mi sembra che per il resto poi se la gestisce a suo
piacimento, i calcoli intermedi li puo gestire sempre con il
decimalformat (lo stesso nome indica l'utilità...) e trasformare le
stringhe in seguito in appositi double, altrimenti mandate voi un
esempio alternativo di codice esplicativo per darlgi un concreto aiuto
e ben venga anche per me, non si sa mai c'è sempre da imparare...

ciao
robyc
Paolo Marra
2007-11-29 11:53:22 UTC
Permalink
certamente questo è solo un esempio lui deve poi adattarlo al suo
codice, mi sembra che per il resto poi se la gestisce a suo
[cut]

Grazie a tutti, ora cerco di utilizzare il Decimalformat.
Grazie ancora
Manuel T
2007-11-29 23:16:11 UTC
Permalink
Post by Paolo Marra
Grazie a tutti, ora cerco di utilizzare il Decimalformat.
Grazie ancora
E sbaglieresti. Il decimal format ti permette di "mostrare" un numero
formattato in un certo modo.

Quello che devi fare tu è ben più semplice.
-moltiplicare il numero per 10^n con n pari a cifre decimali (2.54643232424
* 100 = 254.643232424)
- Arrotondare, troncare... fai tu (254.643232424 -> 255)
- dividere per 10^n. (255.0 / 100.0 = 2.55)

Fa' molta attenzione a trattare gli ultimi due operandi come double,
altrimenti otterrai risultati imprevisti(esegue la divisione intera).
robyc
2007-11-30 09:44:40 UTC
Permalink
ringraziando l'utente manuelT, codifico il suo post.

double divisione = 2.55643232424;
divisione *=100;
divisione = Math.round(divisione);
System.out.println("RIS prima divisione: "+divisione);
divisione = ((divisione)/100);
System.out.println("Risultato finale: "+divisione);correttamente
arrotondato
Manuel T
2007-11-29 23:11:31 UTC
Permalink
Post by robyc
in maniera molto semplice
Semplice un cavolo. Prepara un loop di un milione di cicli con
arrotondamenti a modo mio ed a modo tuo e vediamo.
Massimo
2007-12-01 18:41:21 UTC
Permalink
Post by Paolo Marra
Ciao a tutti, ho un piccolo problema al quale spero possiate dare una
soluzione.
Io ho una serie di variabili Double, ma ho la necessita' che le cifre
decimali siano al piu' 2.
C'e' qualche metodo che permette di fare l'arrotondamento?
Math.round non fa al caso mio purtroppo!
Qualcuno ha qualche idea?
Grazie
Paolo
Prova così

private static double round(double value, int decimalPlace)
{
double power_of_ten = 1;
while (decimalPlace-- > 0)
power_of_ten *= 10.0;
return Math.round(value * power_of_ten) / power_of_ten;
}

Massimo
Paolo
2007-12-03 12:44:47 UTC
Permalink
Post by Massimo
Prova così
private static double round(double value, int decimalPlace)
{
double power_of_ten = 1;
while (decimalPlace-- > 0)
power_of_ten *= 10.0;
return Math.round(value * power_of_ten) / power_of_ten;
}
Grazie ... funziona alla perfezione.

Loading...