Java: ¿Cómo establecer la precisión de un valor doble?

Hace poco estuve trabajando con números y me encontré con una situación en la que quiero establecer la precisión de un valor doble, por ejemplo, a 6 dígitos o 4 dígitos, dependiendo del valor almacenado en la base de datos.

Por ejemplo, si en la base de datos la precisión se establece como 4 dígitos, entonces la salida debe verse como,

10.0000.

Lo he intentado con DecimalFormat y usando la cadena ##.####, pero es molesto usar símbolos cada vez.

¿Hay algún enfoque mejor, digamos algo como lo siguiente:

Double value = 10.0;
value.setPrecision(4);
Solución

No puede establecer la precisión de un doble (o Double) a un número específico de dígitos decimales, porque los valores de punto flotante no tienen dígitos decimales. Tienen dígitos binarios.

Tendrá que convertir a un radix decimal, ya sea a través de BigDecimal o DecimalFormat, dependiendo de lo que quiera hacer con el valor posteriormente.

Véase también mi respuesta a esta pregunta para refutar las inevitables respuestas *100/100.

Comentarios (0)

La precisión de double y float está fijada por su tamaño y por la forma en que se implementan los tipos de punto flotante IEEE.

El número de dígitos decimales en la salida, por otro lado, es una cuestión de formato. Tienes razón en que escribir la misma constante una y otra vez es una mala idea. Deberías declarar una constante de cadena en su lugar, y utilizar su representación simbólica.

private static final String DBL_FMT = "##.####";

El uso de una representación simbólica le permitiría cambiar la precisión en todos los lugares donde se utiliza la constante sin buscar a través de su código.

Comentarios (0)

Para ampliar lo dicho por @EJP, el concepto de 'precisión' cuando se trata de dobles es extremadamente tenso. Como se ha comentado en https://stackoverflow.com/a/3730040/390153, ni siquiera se puede representar 0,1 como un doble, independientemente de la precisión, por la misma razón que no se puede representar 1/3 en base 10 con una precisión finita.

Tienes que tener en cuenta el problema que estás tratando de resolver, y considerar:

a) ¿Debería usar dobles en primer lugar? Si la precisión es un concepto relevante, entonces usar dobles puede ser un error.

b) Si los dobles son apropiados, ¿qué entiendo por precisión? Si sólo se trata de la visualización, envuelva la lógica en una función de visualización y sólo tendrá que tratarla en un lugar; es decir, aplique el principio DRY.

Comentarios (0)