2010-07-20 27 views
5

Tengo un objeto BigDecimal, myNumber, con longitud desconocida. Por ejemplo: 12345678.¿Cómo mostrar siempre un objeto BigDecimal en formato decimal completo en lugar de notación científica?

Siempre quiero dividir este número por 1 millón de dólares, por lo que hago:

myNumber.divide(BigDecimal.valueOf(1000000)) 

me sale 12.345678.

Quiero mostrar esto como una cadena "12.345678", sin cortar los decimales lugares.

por lo que

myNumber.divide(BigDecimal.valueOf(1000000)).toString() 

Esto funciona muy bien con el ejemplo anterior. Pero si myNumber es algo ridículamente pequeña o grande, como por ejemplo:

0.00000001 

Después de dividir 0.00000001 por un millón y convertir a cadena, muestra como notación científica, que no es lo que quiero. Quiero que siempre se muestre en formato decimal completo (en este caso, 0.00000000000001).

¿Alguna idea?

+0

posible duplicado de [¿Por qué Java BigDecimal devuelve 1E + 1?] (Http://stackoverflow.com/questions/925232/why-does-java-bigdecimal-return-1e1) – polygenelubricants

Respuesta

3

Debe realizar la división utilizando la variante de divide() que incluye un modo de redondeo y una escala, y establecer la escala lo suficientemente grande para incluir todos los dígitos fraccionarios.

int s = myNumber.scale(); 
BigDecimal result = myNumber.divide(BigDecimal.valueOf(1000000), s+6, RoundingMode.UNNECESSARY); 

A continuación, utilice toPlainString() a formato.

2

Creo que BigDecimal.toPlainString() es el método que necesita. Sin embargo, tenga en cuenta que la propia división lanzará una excepción cuando la representación decimal sea infinita, como con 1/3.

+0

Puede dar un ejemplo de dónde 'toString()' no arroja una excepción y 'toPlainString()' hace? – polygenelubricants

+2

@polygenelubricants: Fue mi error, arreglé la respuesta. La ArithmeticException se produce al dividir. Un BigDecimal no puede manejar la representación decimal infinita. –

+1

sí, hice esa pregunta en stackoverflow =) http://stackoverflow.com/questions/2749375/arithmeticexception-thrown-during-bigdecimal-divide – polygenelubricants

1

BigDecimal.toString o toPlainString ayudaría.

Cuestiones relacionadas