2012-05-17 7 views
27

mio codice di esempio:Come posso dividere correttamente utilizzando BigDecimal

import java.math.*; 

public class x 
{ 
    public static void main(String[] args) 
    { 
    BigDecimal a = new BigDecimal("1"); 
    BigDecimal b = new BigDecimal("3"); 
    BigDecimal c = a.divide(b, BigDecimal.ROUND_HALF_UP); 
    System.out.println(a+"/"+b+" = "+c); 
    } 
} 

Il risultato è: 1/3 = 0

Che cosa sto facendo di sbagliato?

+1

Mi dispiace per Lorem ipsum, ma non mi avrebbe permesso di postare senza di essa come "il problema è stato troppo breve". –

+0

Il tuo risultato è corretto. Un terzo, arrotondato alla cifra intera più vicina, rompendo le cravatte arrotondando per eccesso, è in effetti uno zero rotondo e piatto. –

+0

Quindi se ho bisogno di 0.33333333? Come devo dividere 1 per 3? –

risposta

51

Non è stata specificata una scala per il risultato. Si prega di provare questo

import java.math.*; 

    public class x 
    { 
     public static void main(String[] args) 
     { 
     BigDecimal a = new BigDecimal("1"); 
     BigDecimal b = new BigDecimal("3"); 
     BigDecimal c = a.divide(b,2, BigDecimal.ROUND_HALF_UP); 
     System.out.println(a+"/"+b+" = "+c); 
     } 
    } 

questo darà il risultato come 0,33. Si prega di leggere il API

Rohan

+0

Stavo guardando 1.5 API che manca 'divite (Sigdecimal, int, int)' ... –

+0

Jan il link nel mio post è per 1.5 API. dividere (BigDecimal divisor, int scale, int roundingMode) è stato intorno per qualche ora, credo. –

1

Creare gli BigDecimal s utilizzando i galleggianti, ad esempio "1.0"; almeno il numeratore, se vuoi un risultato decimale.

+0

È 'BigDecimal c = a.setScale (5) .divide (b, BigDecimal.ROUND_HALF_UP);' approccio corretto? Può essere fatto meglio? –

+0

@JanAjan Sì, probabilmente è un approccio migliore. –