es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

BeanIO: Formato de número con longitud fija para enteros y decimales sin separador.

¿Hay alguna manera de dar formato a un número con longitud fija agregando separador utilizando la Anotación? Siempre recibo 10 posiciones enteras y dos decimales, obteniendo una longitud fija de 12.

El campo de anotación que uso es:

@Field(at=576, length=12, format="###.##")
private BigDecimal impTotal;

Aquí hay un ejemplo:

Recibido: 00000000000150
Valor esperado: 1.50

Estoy usando esto para resolverlo, pero creo que podría ralentizar el proceso:

public BigDecimal getImpTotal() {
return impTotal.divide(new BigDecimal(100));
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible dar formato a un número con longitud fija añadiendo separadores usando anotaciones en Java. Un ejemplo de cómo hacerlo es utilizando la anotación @DecimalMin con el parámetro value establecido en el valor mínimo permitido y el parámetro message establecido en el formato deseado para el número. Para el caso específico de una longitud fija de 12 con 10 posiciones enteras y 2 posiciones decimales, se podría utilizar la siguiente anotación:

    @DecimalMin(value = "0000000000.01", message = "El valor debe estar en el formato ##########.##")
    private BigDecimal impTotal;
    

    Esto asegurará que el valor de impTotal debe ser al menos 0.01 y se mostrará como una cadena de longitud fija con 10 posiciones enteras y 2 posiciones decimales, con ceros a la izquierda si es necesario.

    Como alternativa, se podría seguir utilizando la anotación @Field con format="###.##", pero modificar el método getImpTotal() para multiplicar el valor por 100 antes de devolverlo:

    @Field(at=576, length=12, format="###.##")
    private BigDecimal impTotal;
    
    public BigDecimal getImpTotal() {
        return impTotal.multiply(new BigDecimal(100));
    }
    

    Esto también asegurará que el valor se muestre con 10 posiciones enteras y 2 posiciones decimales, con una longitud fija de 12, pero requerirá multiplicar y dividir el valor por 100.

Comments are closed.