DecimalFormat patrón de límite no funciona bien
-
14-11-2019 - |
Pregunta
Estoy usando DecimalFormat para crear un formato decimal que es siempre de 6 caracteres de largo.En primer lugar he utilizado el formato de cadena de new DecimalFormat("000.00")
pero esto me dio un error para los números negativos.El signo menos se agrega y hace que el número uno de los espacios más grandes, resultando en -005.25
y no -05.25
como se desee.
He sido capaz de solucionar esto con el siguiente código
DecimalFormat fmt;
if(netAmt < 0){
fmt = new DecimalFormat("00.00");
}else{
fmt = new DecimalFormat("000.00");
}
System.out.println(fmt.format(netAmt));
Pero DecimalFormat tiene la ;
carácter para dar formato a los números negativos de manera diferente, a continuación, los números positivos.No he sido capaz de hacer este trabajo correctamente.Como yo lo entiendo el siguiente código debería funcionar como el anterior.
DecimalFormat fmt = new DecimalFormat("000.00;00.00");
System.out.println(fmt.format(netAmt));
El resultado es que el patrón antes de la ;
se utiliza para ambos positivos y negativos de los números causando la -005.25
error de permanecer.¿Qué estoy haciendo mal?Soy la incomprensión de lo que ;
es para?
Solución
¿El siguiente patrón de cadena de ayuda: "%06.2f%n"
Un ancho fijo de 6 con "0" relleno de la parte delantera?
ejemplo
System.out.println(String.format("%06.2f%n",1.3));
System.out.println(String.format("%06.2f%n",-3.323));
¿Qué desea el comportamiento cuando el número es mayor de 3 dígitos, es decir, que no caben?
Otros consejos
Estoy bastante seguro de que el segundo patrón es ignorado, y sólo las partes específicas para la negación, por ejemploel signo - o () etc.
Que mi comprensión de la lectura del siguiente pasaje de la JavaDocs
Un DecimalFormat patrón contiene un positivo y negativo de la sub-patrón, por ejemplo, "#,##0.00;(#,##0.00)".Cada patrón tiene un prefijo numérico de una parte, y el sufijo.La negativa patrón es opcional;si no, entonces la positiva patrón prefijado con el localizadas signo menos ("- "en la mayoría de las localizaciones) se utiliza como el negativo de la sub-patrón.Es decir, "0.00" es equivalente a "0.00;-0.00". Si hay un explícito negativo sub-patrón, sólo sirve para especificar la negativa de prefijo y sufijo;el número de dígitos, un mínimo de dígitos, y otras características, son todos de la misma como la positiva patrón.Eso significa que "#,##0.0#;(#)" produce, precisamente, el mismo comportamiento que "#,##0.0#;(#,##0.0#)".