2009-11-10 4 views
1

je veux la valeur flottante de 3 chiffres de fraction après le chiffre, je ne veux pas arrondir de la valeur par exemple: float f = 2.13275; je veux f comme 2.132 pas 2.133 comment puis-je le faire en java?valeur flottante troncation java

+0

l'impression d'une valeur arrondie, ou en changeant la valeur elle-même? les deux réponses ont répondu à ces questions. –

Répondre

1

Utilisez la classe DecimalFormat.

+0

C'est la meilleure chose possible, je suppose. –

+0

Cette solution ne sera-t-elle pas arrondie plutôt que tronquée? – Asaph

+0

@Asaph, vous pouvez utiliser différents modes d'arrondi, y compris RoundingMode.FLOOR ou RoundingMode.DOWN. –

1

Math.floor() enlèvera n'importe quoi après le point décimal sans arrondir. Vous pouvez jouer un tour où vous multipliez par l'ordre de grandeur approprié, plancher le résultat et ensuite diviser par le même ordre de grandeur. Comme ceci:

double f = 2.13275; 
double f2 = Math.floor(f * 1000)/1000; 

Remarque: la classe Math traite les doubles, pas les flottants. Si veut vraiment veut des flotteurs, vous pouvez faire un peu de coulée, mais il y aura une perte de précision. D'un autre côté, vous ne voulez que 3 décimales, cela ne vous dérangera probablement pas.

Editer: @Jason S signale que les nombres négatifs peuvent avoir leur dernière décimale modifiée. Je ne suis pas sûr si vous le voulez ou si c'est même pertinent dans le contexte de votre code. Mais si c'est le cas, il y a plusieurs façons de le contourner. La première consiste à utiliser Math.ceil() pour le nombre négatif cas:

double f2 = (f < 0 ? Math.ceil(f * 1000) : Math.floor(f * 1000))/1000; 

Ouais, je sais, ça devient un peu en désordre. Mais cela illustre le point.

+1

fonctionne parfaitement pour les nombres positifs. Si vous voulez couper l'arrondi sans les nombres négatifs, vous devez utiliser la troncature plutôt que le sol, ou prendre la valeur absolue dans Math.floor() et multiplier par le signe du nombre d'origine après. –

+1

@Jason S: Bon point sur les nombres négatifs. – Asaph

+0

Salut, cela fonctionne pour les valeurs positives, mais cela ne fonctionne pas pour les valeurs flottantes natives – sanjana

0

Utilisation DecimalFormat avec setRoundingMode (RoundingMode.FLOOR)

+1

Mais cela ne fonctionnera pas pour les nombres négatifs. – Asaph

1

Ne serait-(int) (f * 1000) /1000.0 travail? Cela me semble plus clair que les autres suggestions.

+0

C'est vraiment le même concept que la solution Math.floor(). Quoi qu'il en soit, le PO a besoin de travailler avec des nombres négatifs et cette réponse ne répond pas à cette exigence. – Asaph

+0

Il devrait faire la bonne chose avec des nombres négatifs. C'était un peu mon point. –

+0

Je viens de vérifier cela, et il a le bon comportement.J'étais à peu près sûr que lancer à int troncature effectuée, plutôt que d'arrondir. –

0

Comme mentionné précédemment, vous pouvez utiliser DecimalFormat

DecimalFormat df= new DecimalFormat("##.###"); //##.### spécifie le format que vous voulez

String temp=df.format(var_name); 
Questions connexes