2010-05-21 5 views
2

Je voudrais être en mesure d'arrondir n'importe quel nombre à quater du nombre entier.BigDecimal arrondi question

Par exemple:

 
100.33 -> 100.50 
100.12 -> 100.25 
100.66 -> 100.75 
100.99 -> 101.00 
100.70 -> 100.75 
100.00 -> 100.00 
100.25 -> 100.25 

etc ...

gars merci ...

+1

Qu'en est--1,22? –

+0

Il ne peut s'agir que d'un nombre positif. – user318247

Répondre

4

Cela fait ce que vous avez besoin: il multiplie par 4, arrondit, divise ensuite par retour 4.

String[] tests = { 
     "100.33", "100.12", "100.66", "100.99", "100.70", "100.00", "100.25", 
    }; 
    final BigDecimal FOUR = BigDecimal.valueOf(4); 
    for (String test : tests) { 
     BigDecimal d = new BigDecimal(test); 
     d = d.multiply(FOUR).setScale(0, RoundingMode.UP) 
      .divide(FOUR, 2, RoundingMode.UNNECESSARY); 
     System.out.println(d); 
    } 
0

Math.round(x.doubleValue() * 4)/4

ou Math.ceil ou Math.floor en fonction de ce que vous voulez

+0

'Math' prend les arguments' float' ou 'double', pas' BigDecimal'. –

+0

merci de le signaler, Peter. réponse fixe. – oedo

+0

Pourquoi multipliez-vous par 4? – user318247

1

I ne crois pas c'est possible sans intervention manuelle. Vous pouvez spécifier les paramètres d'arrondi en passant un MathContext au constructeur BigDecimal; cependant, le mode d'arrondi utilisé dans un objet de cette classe doit être une constante enum RoundingMode (et aucun de ceux-ci n'implémente le type d'arrondi souhaité). Ce serait bien si c'était à la place une interface que vous pourriez écrire votre propre définition de, mais vous l'avez.

En fonction de l'efficacité de votre code, vous pouvez bien sûr multiplier le nombre par 4, arrondir au nombre entier le plus proche et diviser par 4 à nouveau. C'est probablement l'effort de programmation le moins réel et est relativement facilement compréhensible, donc si votre code n'est pas dans une section critique, c'est ce que je suggère.

+0

Le code est en fait très exigeant ... il tourne plus de 1000000 fois en heure – user318247