2011-03-08 11 views
6

¿Por qué el siguiente código imprime 0.00 y no 0?Aclaración sobre el comportamiento de BigDecimal.stripTrailingZeroes()

BigDecimal big = new BigDecimal("0.00"); 
big = big.stripTrailingZeros(); 
System.out.println(big.toPlainString()); 

La siguiente es la documentación para stripTrailingZeroes:

devoluciones BigDecimal que es numéricamente igual a este, pero con cualquier ceros finales retirados de la representación. Por ejemplo, eliminar los ceros finales del valor BigDecimal 600.0, que tiene componentes [BigInteger, scale] equivale a [6000, 1], produce 6E2 con componentes [BigInteger, scale] igual a [6, -2]

Devoluciones :
un BigDecimal numéricamente igual con cualquier cero final eliminado.
+0

@eznme: Fijo, es demasiado tarde aquí :)) – Leonid

+0

Esto parece un error para mí. Sorprendentemente, Java Compatibility Kit para Java 1.6 no menciona la función 'stripTrailingZeros' en absoluto. Bueno, excepto que el método debe existir, pero nada más. –

+0

¿Cuál es generalmente el procedimiento para reportar problemas sospechosos con bibliotecas Java? – Leonid

Respuesta

0

quita los ceros de la representación interna [6000,1] y adapta la escala en consecuencia 1 -> -2. La representación interna también es algo independiente de la impresión final, que también se ve afectada por el formato, el redondeo y la configuración regional.

+0

¿Cómo es que 'toPlainString' depende de' format' y 'locale'? El modo de redondeo se usa para "dividir", así que no creo que influya en 'toPlainString' de ninguna manera. De hecho, desde el código fuente de 'toPlainString' tampoco parece que sea el caso. – Leonid

+0

No me refiero aPlainString. Me refiero a la salida formateada; en la producción que rara vez puede utilizar en PlainString, normalmente debe obviar un formato específico como 1234.567, 123E45 o 0.123 * 10 ** 7; y no puedes cambiar entre ellos. –

Cuestiones relacionadas