volados veces una simulacion simula salio realizar que probabilidad para palabras pagina monedas moneda lanzar lanzamiento juego indicar cruz con cara java bigdecimal

java - simulacion - probabilidad de lanzar una moneda 1000 veces



¿Qué modo de redondeo se utilizará para la manipulación de la moneda en java? (5)

He leído en el sitio de Java para usar BigDecimal para las monedas. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

¿Pero con qué modo de redondeo deberíamos usar? ¿Cuál es el más apropiado y más ampliamente nosotros?


La mayoría de las veces, BigDecimal es la única opción válida para las monedas. Pero la elección de la estrategia de redondeo no es tan obvia.

El valor predeterminado es HALF_EVEN que resulta ser una buena opción. Este algoritmo se conoce como redondeo de banqueros (ver discusión here ).

Otra estrategia común es HALF_UP que es más intuitiva pero tiene características estadísticas ligeramente peores.

También tenga en cuenta que en muchas ocasiones (especialmente en banca y seguros) la estrategia de redondeo será dictada por los requisitos del negocio, a menudo diferentes para varios casos de uso.


No hay un modo "correcto", depende del caso de negocio. Ejemplos:

  • Al calcular los impuestos anuales, las fracciones a menudo se cortan ( RoundingMode.FLOOR ).
  • Al calcular una bonificación, es posible que desee redondear siempre a favor del cliente ( RoundingMode.CEILING ).
  • Para los impuestos sobre una factura, generalmente redondeas HALF_UP
  • Cuando haces simulaciones financieras complejas, no quieres redondear nada.

La documentación de RoundingMode contiene muchos ejemplos de cómo funcionan los diferentes modos.

Para obtener una mejor respuesta, debe decirnos qué quiere lograr.

Dicho esto, BigDecimal es el tipo correcto para usar en Java porque puede preservar cualquier cantidad de precisión y le permite elegir el modo de redondeo más adecuado para su caso.


Nunca debes usar un tipo decimal para las monedas. Utilice un tipo entero. Esto mantiene la precisión de compra evitando errores de redondeo asociados con flotadores.

Cuando muestre una cantidad, divida por el factor apropiado para obtener la parte no integral.


Para las aplicaciones financieras, ROUND_HALF_EVEN es el modo de redondeo más común. Ese modo evita el sesgo. Pero para la visualización debes usar la clase NumberFormat. Esta clase se ocupará de los problemas de localización para los montos en diferentes monedas. Pero NumberFormat solo acepta primitivas. Así que usa el último si puedes aceptar pequeños cambios de precisión en las transformaciones a un doble.


Típicamente, usarías redondeo "a la mitad", así:

myBigDecimal.setScale(2, RoundingMode.HALF_UP);

De esta manera, redondeará a dos lugares decimales (que utilizan la mayoría de las monedas, por ejemplo, dólares y centavos, obviamente hay excepciones), y redondeará los valores de manera que medio centavo o más se redondeará mientras que menos de medio centavo redondeará hacia abajo. Ver el javadoc para más detalles.