2014-09-29 19 views
10

Ho un valore BigDecimale il cui valore è 450.90, voglio arrotondare al valore intero del foro successivo e quindi stampare il valore intero senza punti decimali, come questo;Arrotondare BigDecimal a Valore intero

Val: 450,90 -> Rounded: 451.00 -> Output: 451

Val: 100,00 mila uno -> arrotondati: 101,00 mila di uscita: 101

Controllato alcune soluzioni, ma non sto ottenendo il risultato atteso, Heres il mio codice;

BigDecimal value = new BigDecimal(450.90); 
value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP 
return value.intValue(); 

Grazie!

+0

Stai ignorando la setScale nel tuo esempio –

+1

Vuoi dire come '(int) Math.ceil (450,90)'? –

+0

Se una delle risposte di seguito * ha * risposto * alla tua domanda, il modo in cui funziona questo sito, "accetti" la risposta facendo clic sul segno di spunta accanto ad essa. Dettagli: http://stackoverflow.com/help/someone-answers Ma solo se la tua domanda ha davvero una risposta. –

risposta

23

setScalerendimenti un nuovo BigDecimal con il risultato, non cambia l'istanza si chiama via. Quindi assegnare il valore di ritorno di nuovo a value:

value = value.setScale(0, RoundingMode.UP); 

Live Example

ho anche cambiato in RoundingMode.UP perché hai detto sempre voluto per arrotondare. Ma a seconda delle tue esigenze, potresti preferire lo RoundingMode.CEILING; dipende da ciò che si desidera che -451.2 diventi (-452 [UP] o -451 [CEILING]). Vedi RoundingMode per ulteriori informazioni.

+0

Ottimo! questo ha davvero risolto il mio problema. Non lavorerò con numeri negativi, quindi RoundingMode.Up funzionerà perfettamente! grazie –

+0

@RodrigoMartinez: Sono contento che abbia aiutato. –

0

è necessario utilizzare il valore restituito

BigDecimal value = new BigDecimal(450.90); 
value = value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP 

nota che BigDecimal è invariante

Scaling/operazioni di arrotondamento (setScale e rotondo) restituire un BigDecimal il cui valore è di circa (o esattamente) uguale a quello dell'operando , ma la cui scala o precisione è il valore specificato; ovvero, aumentano o diminuiscono la precisione del numero memorizzato con effetto minimo sul suo valore.

3

uso:

value.setScale(0, RoundingMode.CEILING); 
0

utilizzare la funzione Math.ceil(). Il metodo ceil fornisce il numero più piccolo che è maggiore o uguale all'argomento.

Si può leggere su di esso here

+0

Beh, questo non funziona direttamente con BigDecimals ... –

1

Dalla descrizione del metodo:

Nota che, poiché gli oggetti BigDecimal sono immutabili, le chiamate di metodo setScale non comportano l'oggetto originale viene modificato, contrariamente alla solita convenzione di avere metodi denominati setX mutate field X. Invece, setScale restituisce un oggetto con la scala corretta; l'oggetto restituito può o non può essere assegnato di recente.

public void test() { 
    BigDecimal value = new BigDecimal(450.90); 
    System.out.println(value.setScale(0, RoundingMode.HALF_UP)); // prints 451 
}