2012-06-05 21 views
10

Sto provando a convalidare la precisione e la scala di un grande decimale.Come convalidare la precisione e la scala con BigDecimal?

Sto cercando di convalidare un grande decimale non supera una precisione di 10 o una scala di 2. Ho provato a fare una lunghezza massima in modo che il valore non avrebbe violato i miei vincoli di lunghezza db, ma non è stato possibile ottenere sia quello che funziona. Qualcuno potrebbe gentilmente indicarmi la direzione per risolvere questo problema?

+0

forse come NUMERO (10,2) (base Oracle, però)? –

+0

Usiamo sybase, quindi non sono proprio sicuro di Oracle. Sto solo cercando di costruire un validatore di campo in java con un'istruzione if da testare e assicurarmi che il valore inviato non superi 10,2. –

risposta

23

La classe BigDecimal ha tre metodi che potrebbero essere di interesse per questo:

  • precision(), che restituisce il numero di cifre per il valore non graduato (per esempio, per il numero 123,45, la precisione restituito è 5
  • scale(), che restituisce il numero di cifre dopo il separatore decimale quando positivo (scale() può essere negativo, in questo caso, il valore non graduato del numero viene moltiplicato per dieci alla potenza della negazione della scala. , una scala di -3 significa che il valore non graduato viene moltiplicato per 1000),
  • stripTrailingZeros(), che restituisce uno BigDecimal con tutti gli zeri finali rimossi dalla rappresentazione.

Per esempio, per calcolare la precisione e la scala per un dato BigDecimal b, siamo in grado di scrivere qualcosa di simile:

BigDecimal noZero = b.stripTrailingZeros(); 
int scale = noZero.scale(); 
int precision = noZero.precision();  
if (scale < 0) { // Adjust for negative scale 
    precision -= scale; 
    scale = 0;   
} 
+0

Questo è esattamente quello che stavo cercando, ho completamente perso la scala e la precisione nell'API. Mi vergogno. –

+0

@Teetoo, @George - Non pensi in 'if' block -' scale = 0; 'e' precision - = scale; 'dovrebbe essere scambiato? – Premraj

+0

@Teetoo Ho fatto il resto, recensirlo :) – Premraj

Problemi correlati