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;
}
tal como el número (10,2) (Base de Oracle, sin embargo)? –
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. –