Newsgroup: it.comp.java
Titolo: Estrarre la parte decimale da un double

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

 che decimale?
vedi Math.floor

Ciao Marco,
mi restituisce solo la parte intera pero'!
Grazie lo stesso


 Numero 2 = 23;
Puoi estrarre la parte intera del numero e per ricavare la decimale fai
la sottrazione con quest'ultima.

 mi restituisce solo la parte intera pero'!
vedi operatore "-"

 vedi operatore "-"
ROTFL

marcopar ha scritto:

che cosa complicata, un bel cast a intero e risolve.


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

 writes:
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

 (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

> (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...


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

 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...


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


 writes:
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 ?


 
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

Si tranquillo grazie 1000


 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()....

 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)


 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.

 String.split()....
Infatti, visto che c'e', lo usi.
Pietro

Pietro ha scritto:

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.

   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?

 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"

 writes:
MT> E se le cifre non sono note a priori che fai? :)
Un loop ? :)
