2012-06-05 54 views
10

Estoy tratando de validar la precisión y la escala de un gran decimal.¿Cómo valido la precisión y escala con BigDecimal?

Estoy buscando para validar un gran decimal no excede una precisión de 10 o una escala de 2. Intenté hacer un maxlength así que el valor no estaría violando mis limitaciones de longitud de db, pero no pude obtener eso trabajando bien. ¿Alguien podría indicarme amablemente en la dirección de resolver este problema?

+0

tal como el número (10,2) (Base de Oracle, sin embargo)? –

+0

Utilizamos sybase, por lo que no estamos muy seguros acerca de Oracle. Solo intento construir un validador de campo en Java con una declaración if para probar y asegurarme de que el valor que se envía no exceda 10,2. –

Respuesta

23

La clase BigDecimal tiene tres métodos que puedan ser de interés para esto:

  • precision(), que devuelve el número de dígitos para el valor sin escala (por ejemplo, para el número 123.45, la precisión devuelto es 5)
  • scale(), que devuelve el número de dígitos después del separador decimal cuando es positivo (scale() puede ser negativo, en este caso, el valor sin escala del número se multiplica por diez a la potencia de la negación de la escala. , una escala de -3 significa que el valor sin escalar se multiplica por 1000),
  • stripTrailingZeros(), que devuelve BigDecimal con todos los ceros finales eliminados de la representación.

Por ejemplo, para calcular la precisión y la escala para un determinado BigDecimal b, podemos escribir algo así:

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

Esto es exactamente lo que estaba buscando, me perdí completamente la escala y la precisión en la API. Me avergüenza. –

+0

@Teetoo, @George - ¿No crees que en el bloque 'if' -' scale = 0; 'y' precision - = scale; 'deberían intercambiarse? – Premraj

+0

@Teetoo Hice el cambio, revísalo :) – Premraj

Cuestiones relacionadas