PDA

View Full Version : [JAVA] Estarre parte decimale da un float


spv42
14-11-2006, 14:15
Salve,

l'ogetto è molto esplicativo, come posso fare???

Grazie

Andrea

Furla
14-11-2006, 14:31
non so niente di java, ma la cosa più stupida che mi è venuta in mente, che funziona su qualsiasi linguaggio: sottrai 1 finché il numero non è minore di 1...

altrimenti fai il numero meno il numero convertito a intero. ma non so se nella conversione effettua arrotondamenti per eccesso...

andbin
14-11-2006, 14:50
Salve,

l'ogetto è molto esplicativo, come posso fare???

Grazie

AndreaSi può fare:
float num = 123.456f;

float dec = num - (float) Math.floor (num);

spv42
14-11-2006, 15:07
non so niente di java, ma la cosa più stupida che mi è venuta in mente, che funziona su qualsiasi linguaggio: sottrai 1 finché il numero non è minore di 1...

altrimenti fai il numero meno il numero convertito a intero. ma non so se nella conversione effettua arrotondamenti per eccesso...


E' Vero!!!

Alcune volte mi meraviglio di quanto possa essere pollo!!

Ti ringrazio!

pisto
14-11-2006, 20:00
Si può fare:
float num = 123.456f;

float dec = num - (float) Math.floor (num);
però, secondo la documentazione, double floor(double a) Returns the largest (closest to positive infinity) double value that is less than or equal to the argument and is equal to a mathematical integer.
quindi, c'è rischio che il risultato della sottrazione abbia ancora una parte intera, non potrebbe funzionare meglio:
double risultatoFloor;
while((risultatoFloor=Math.floor(num))!=0)
num-=(float)risultatoFloor;?

andbin
14-11-2006, 20:21
però, secondo la documentazione,
quindi, c'è rischio che il risultato della sottrazione abbia ancora una parte intera, non potrebbe funzionare meglio:
double risultatoFloor;
while((risultatoFloor=Math.floor(num))!=0)
num-=(float)risultatoFloor;?No. Math.floor() in pratica tronca i decimali. Dato in input 123.456, ritorna 123.0. Quindi sottraendolo al numero iniziale, ottieni solo i decimali, come voluto.

pisto
15-11-2006, 14:13
e tipo fare:
float parteDecimale(float num){
return num-(int)num;
}
?
da quello che ho letto su thinking in java trasformando un float in un int si ottiene la parte intera, anche se il float è 4.9999999, giusto? questo però varrebbe solo fino a che num è <= Integer.MAX_VALUE...

andbin
15-11-2006, 14:21
e tipo fare:
float parteDecimale(float num){
return num-(int)num;
}
?
da quello che ho letto su thinking in java trasformando un float in un int si ottiene la parte intera, anche se il float è 4.9999999, giusto? questo però varrebbe solo fino a che num è <= Integer.MAX_VALUE...Certo, anche il cast tronca i decimali. Solo che poi deve riconvertirlo in float per fare la differenza. Beh, anche usando Math.floor deve fare delle conversioni.