2010-01-09 7 views
3

float per = (num/(float) totbrwdbksint) * 100;aide pour arrondir les nombres

Pour obtenir la valeur de per, disons 29,475342. Je veux qu'il arrondisse jusqu'à deux décimales seulement. Comme 29.48. comment y parvenir?

+0

ya je voulais dire 29.48 désolé pour le type de faute –

Répondre

5

Vous devriez faire cela dans le cadre de la mise en forme - le nombre à virgule flottante lui-même n'a pas de concept de "deux décimales".

Par exemple, vous pouvez utiliser un DecimalFormat avec un motif de « # 0.00 »:

import java.text.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     float y = 12.34567f; 
     NumberFormat formatter = new DecimalFormat("#0.00"); 
     System.out.println(formatter.format(y)); 
    } 
} 
0

vous pouvez utiliser la méthode d'impression au format System.out.printf faire l'impression au format si c'est ce dont vous avez besoin

1

En tant que Jon implies, format pour l'affichage. La façon la plus succincte de le faire est probablement d'utiliser la classe String.

float f = 70.9999999f; 
String toTwoDecPlaces = String.format("%.2f", f); 

Cela se traduira par la chaîne "71.00"

+0

Probablement devrait également ajouter la conversion de la chaîne à la flotte car il semble que de son exemple il veut que le nombre reste comme un flotteur. – Anton

+0

@Anton - il n'y a aucune garantie que l'analyse du résultat à un flottant se traduira par le niveau de précision souhaité. Le code 'System.out.format ("% .15f ", 29.475342f);' affiche un résultat '29.475341796875000'. Même si cela fonctionnait, l'allocation d'un tableau char en tant qu'intermédiaire serait la mauvaise façon d'effectuer l'opération. – McDowell

1

Vous devez faire attention ici, cette réponse n'est pas liée à Java, elle se rapporte à tous les aspects des décimales dans de nombreux langages de programmation, donc il est générique. Le danger réside dans le nombre d'arrondi, est-ce, et il est arrivé dans mon expérience et de savoir qu'il peut être difficile à traiter:

  • Supposant que vous avez affaire à des prix sur les articles, les prix que vous obtenez à partir d'un commerce de détail Le fournisseur peut être différent du prix que l'ordinateur vous indique, il est sûr qu'il est légèrement petit, mais il pourrait ajouter beaucoup d'argent.
  • Ajout d'une taxe de vente sur un prix peut être soit positif ou négatif, il peut avoir un impact de la marge d'exploitation des bilans de perte/profit ...

Si vous êtes dans ce genre de domaine du développement, alors mon conseil n'est pas d'ajuster en arrondissant à la hausse/à la baisse ... il peut ne pas apparaître sur les petites ventes des articles, mais il pourrait apparaître ailleurs ... un comptable le repérerait ... La meilleure chose à faire est de simplement, tronquez-le, par exemple 29.475342 -> 29.47 et laissez-le à cela, pourquoi?, Le .005 peut ajouter à grand profit/perte. En conjonction avec ce qui est discuté ici ... les caisses électroniques et les registres utilisent leur propre variété de manipuler ce scénario, au lieu de traiter XX.XXXXXXXXXX (comme les ordinateurs, qui a 27/28 décimales), il traite XX.XX.

Son quelque chose à garder à l'esprit ...

Hope this helps, Meilleures salutations, Tom.

+0

Comme vous le dites, le 0.005 pourrait ajouter un gros profit/perte, ce qui est précisément pourquoi vous * faites * arrondir plutôt que de simplement tronquer - de sorte que la moitié du temps, vous obtenez des bénéfices, et la moitié du temps que vous perdez. L'arrondi des banquiers est conçu pour rendre cela encore plus juste, je crois. Troncature signifie que le biais est * toujours * dans un sens - si je vous paye et que je tronque toujours le montant que je dois payer, vous êtes forcément perdant. –

+0

@Jon: Quel serait l'algorithme d'arrondi du meilleur banquier à utiliser en C#? Je suis curieux de savoir comment cela fonctionne ... Merci! :) – t0mm13b

Questions connexes