Discussione:
Estrarre la parte decimale da un double
(troppo vecchio per rispondere)
Carmine Montella
2007-01-15 13:25:54 UTC
Permalink
Ciao a tutti,
qual'e' il modo migliore per ricavare da un double sia la parte intera
che decimale?

Esempio:

12.23

Numero 1 = 12;
Numero 2 = 23;

Lo devo splittare in due caselle di testo.

Grazie a tutti
Beck
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
marcopar
2007-01-15 13:39:16 UTC
Permalink
Post by Carmine Montella
qual'e' il modo migliore per ricavare da un double sia la parte intera
che decimale?
vedi Math.floor
Carmine Montella
2007-01-15 13:43:29 UTC
Permalink
Ciao Marco,
mi restituisce solo la parte intera pero'!

Grazie lo stesso
Beck
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
marcopar
2007-01-15 14:56:47 UTC
Permalink
Post by Carmine Montella
mi restituisce solo la parte intera pero'!
vedi operatore "-"
Jack
2007-01-15 15:54:11 UTC
Permalink
Post by marcopar
Post by Carmine Montella
mi restituisce solo la parte intera pero'!
vedi operatore "-"
ROTFL
Jack
2007-01-15 15:54:52 UTC
Permalink
Post by marcopar
Post by Carmine Montella
qual'e' il modo migliore per ricavare da un double sia la parte intera
che decimale?
vedi Math.floor
che cosa complicata, un bel cast a intero e risolve.
Negus
2007-01-15 13:45:33 UTC
Permalink
Post by Carmine Montella
Ciao a tutti,
qual'e' il modo migliore per ricavare da un double sia la parte intera
che decimale?
12.23
Numero 1 = 12;
Numero 2 = 23;
Puoi estrarre la parte intera del numero e per ricavare la decimale fai
la sottrazione con quest'ultima.
Pietro
2007-01-15 16:28:09 UTC
Permalink
Post by Carmine Montella
Ciao a tutti,
qual'e' il modo migliore per ricavare da un double sia la parte intera
che decimale?
12.23
Numero 1 = 12;
Numero 2 = 23;
Lo devo splittare in due caselle di testo.
Come hai appena detto, converti il double in una String formattando il
numero in modo che sia ad esempio la virgola come separatore decimale o
il punto, scegli tu, e poi fai una split della stringa indicando quel
separatore. Le due stringhe che ottieni le puoi utilizzare direttamente
oppure, se ti occorre riconvertirle in intero.

Pietro
Gian Uberto Lauri
2007-01-15 16:48:13 UTC
Permalink
P> il numero in modo che sia ad esempio la virgola come separatore
P> decimale o il punto

Non è il massimo dell'efficenza passare per le stringhe, quando poi
la cosa si risolve numericamente...

(i pezzi della soluzione sono già stati pubblicati)
--
/\ ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
//--\| | \| | Integralista GNUslamico
\/ e coltivatore diretto di Software
Pietro
2007-01-15 17:01:15 UTC
Permalink
Post by Gian Uberto Lauri
P> il numero in modo che sia ad esempio la virgola come separatore
P> decimale o il punto
Non è il massimo dell'efficenza passare per le stringhe, quando poi
la cosa si risolve numericamente...
(i pezzi della soluzione sono già stati pubblicati)
Si, ho visto. Ma se hai un numero tipo 123.456 come fai ad avere la
parte decimale come numero intero 456 e non 0.456?
Inoltre vuole usarle in due caselle di testo, ovvero li vuole usare
come testo, tanto vale utilizzare le stringhe.

Pietro
Gian Uberto Lauri
2007-01-15 18:28:35 UTC
Permalink
P> il numero in modo che sia ad esempio la virgola come separatore
P> decimale o il punto
Post by Gian Uberto Lauri
Non è il massimo dell'efficenza passare per le stringhe, quando poi
la cosa si risolve numericamente...
(i pezzi della soluzione sono già stati pubblicati)
P> Si, ho visto. Ma se hai un numero tipo 123.456 come fai ad avere la
P> parte decimale come numero intero 456 e non 0.456?

Non mi pare tanto difficile...

P> Inoltre vuole
P> usarle in due caselle di testo, ovvero li vuole usare come testo,
P> tanto vale utilizzare le stringhe.

Meno stringhe si creano, più il garbage collector è contento...
--
/\ ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
//--\| | \| | Integralista GNUslamico
\/ e coltivatore diretto di Software
Pietro
2007-01-15 18:34:18 UTC
Permalink
Post by Gian Uberto Lauri
P> il numero in modo che sia ad esempio la virgola come separatore
P> decimale o il punto
Post by Gian Uberto Lauri
Non è il massimo dell'efficenza passare per le stringhe, quando poi
la cosa si risolve numericamente...
(i pezzi della soluzione sono già stati pubblicati)
P> Si, ho visto. Ma se hai un numero tipo 123.456 come fai ad avere la
P> parte decimale come numero intero 456 e non 0.456?
Non mi pare tanto difficile...
Tanto per curiosita', mi puoi indicare come? chiaramente non e' noto il
numero di cifre decimali.

Pietro
Gian Uberto Lauri
2007-01-15 18:41:19 UTC
Permalink
P> From: "Pietro" <***@gmail.com> Subject: Re: Estrarre la
P> parte decimale da un double Newsgroups: it.comp.java Date: 15 Jan
P> 2007 10:34:18 -0800 Organization: http://groups.google.com

P> Non mi pare tanto difficile...
P> Tanto per curiosita', mi puoi indicare come? chiaramente non e'
P> noto il numero di cifre decimali.

Con un po' di attenzione le vecchie moltiplicazioni per 10 dovrebbero
funzionare...

Sul loop sono possibili varie strategie per valutare la condizione di
uscita...
--
/\ ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
//--\| | \| | Integralista GNUslamico
\/ e coltivatore diretto di Software
Carmine Montella
2007-01-17 08:38:34 UTC
Permalink
Grazie a tutti x le risposte,
ho utilizzato la classe StringTokenizer usando come delimitatore il
punto
iterando il tutto creo le due caselle di input coem volevo.

GRazie
Beck
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Gian Uberto Lauri
2007-01-17 09:07:36 UTC
Permalink
CM> Grazie a tutti x le risposte, ho utilizzato la classe
CM> StringTokenizer usando come delimitatore il punto

Ahem, ti sei premurato che non ti arrivino numeri decimali in cui il
separatore tra parte intera e decimale e` la virgola ?
--
/\ ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
//--\| | \| | Integralista GNUslamico
\/ e coltivatore diretto di Software
Carmine Montella
2007-01-17 15:38:36 UTC
Permalink
Si tranquillo grazie 1000
Beck
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Corrado Alesso
2007-01-17 09:27:30 UTC
Permalink
Post by Carmine Montella
Grazie a tutti x le risposte,
ho utilizzato la classe StringTokenizer usando come delimitatore il
punto
iterando il tutto creo le due caselle di input coem volevo.
GRazie
Beck
Occhio che e' semi-deprecata

dai doc:

StringTokenizer is a legacy class that is retained for compatibility reasons
although its use is discouraged in new code. It is recommended that anyone
seeking this functionality use the split method of String or the java.util.regex
package instead.

Ciao

Co
Manuel T
2007-01-19 13:55:29 UTC
Permalink
StringTokenizer is a legacy class [...]
Dalle mie parti si dice che non si spara ad una mosca con un cannone.

dato x=123.456

Per ottenere 123 -> Math.floor(123);

per ottenere 456, prendere il risultato di poc'anzi, supposto si chiami y:

final double EPSILON = 0.000000000000001;
while(Math.abs(x - Math.floor(x)) > epsilon)
y*=10;

Mi domando come avreste fatto senza il vetusto Tokenizer/ moderno
String.split()....
Manuel T
2007-01-19 13:55:53 UTC
Permalink
StringTokenizer is a legacy class [...]
Dalle mie parti si dice che non si spara ad una mosca con un cannone.

dato x=123.456

Per ottenere 123 -> Math.floor(123);

per ottenere 456, prendere il risultato di poc'anzi, supposto si chiami y:

final double EPSILON = 0.000000000000001;
while(Math.abs(y - Math.floor(y)) > epsilon)
y*=10;

Mi domando come avreste fatto senza il vetusto Tokenizer/ moderno
String.split()....
Jack
2007-01-20 19:32:11 UTC
Permalink
Post by Manuel T
StringTokenizer is a legacy class [...]
Dalle mie parti si dice che non si spara ad una mosca con un cannone.
final double EPSILON = 0.000000000000001;
while(Math.abs(y - Math.floor(y)) > epsilon)
y*=10;
appunto, perche' sparare ad una mosca con un mattone...

intero = (int)numero;

decimale = Math.abs((int)((numero-intero)*10));

dove n e' una potenza di 10 (1,10,100,1000,...) a dipendenza di quante
cifre decimali vuoi

ciao Jack
--
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?
Manuel T
2007-01-21 10:19:59 UTC
Permalink
Post by Jack
Post by Manuel T
final double EPSILON = 0.000000000000001;
while(Math.abs(y - Math.floor(y)) > epsilon)
y*=10;
appunto, perche' sparare ad una mosca con un mattone...
intero = (int)numero;
decimale = Math.abs((int)((numero-intero)*10));
dove n e' una potenza di 10 (1,10,100,1000,...) a dipendenza di quante
cifre decimali vuoi
E se le cifre non sono note a priori che fai? :)

Se ci fai caso, itero fino all'esaurimento dei decimali, ovvero quando
il numero, via via moltiplicato per 10, è uguale alla sua troncatura,
dove uguale, per numero double, è da intendere come "differisce a meno
di una costante epsilon piccola a piacere.
--
Emanuele Torrenti
Registered Linux User #409659
"I fought the law, and the law won"
Gian Uberto Lauri
2007-01-22 09:10:49 UTC
Permalink
MT> E se le cifre non sono note a priori che fai? :)

Un loop ? :)
--
/\ ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
//--\| | \| | Integralista GNUslamico
\/ e coltivatore diretto di Software
Manuel T
2007-01-19 13:59:12 UTC
Permalink
StringTokenizer is a legacy class [...]
Dalle mie parti si dice che non si spara ad una mosca con un cannone.

dato:

double numero=123.456

Per ottenere 123 -> int intero=Math.floor(123);

per ottenere 456:

double decimale= numero - intero;

final double EPSILON = 0.000000000000001;
while(Math.abs(decimale - Math.floor(decimale)) > epsilon)
decimale*=10;

Mi domando come avreste fatto senza il vetusto Tokenizer/ moderno
String.split()....

N.B.: dentro while è da intendersi come se fosse un test di non uguaglianza.
Pietro
2007-01-19 18:05:54 UTC
Permalink
Post by Manuel T
Mi domando come avreste fatto senza il vetusto Tokenizer/ moderno
String.split()....
Infatti, visto che c'e', lo usi.

Pietro
Manuel T
2007-01-20 10:09:06 UTC
Permalink
Post by Pietro
Post by Manuel T
Mi domando come avreste fatto senza il vetusto Tokenizer/ moderno
String.split()....
Infatti, visto che c'e', lo usi.
C'è per altri scopi, come già detto da Gian Umberto e Corrado.

In generale, istanziare un parser per un'operazione numerica è folle,
senza considerare la questione del separatore decimale.
Loading...