java floating-point multiplication double-precision

¿Exactitud de la multiplicación de doble precisión en java?



floating-point multiplication (3)

¿Cuál es la precisión garantizada del operador de multiplicación para valores dobles en java?

Por ejemplo, 2.2 * 100 es 220.00000000000003, pero 220 es un número doble. 220.00000000000003 es el siguiente doble después de 220.


Si está trabajando con datos financieros, no use float or double simplemente use java.math.BigDecimal


La multiplicación funciona bien, pero 2.2 no se puede representar exactamente como un doble. Los dobles más cercanos son:

  • 2.199999999999999733 (0x4001999999999999)
  • 2.200000000000000177 (0x400199999999999a)

Algún software imprimirá el último valor como 2.2 , pero eso no significa que sea exacto. Simplemente significa que se trata como "lo suficientemente cerca".


puede usar BigDecimal, pero asegúrese de usar la construcción de BigDecimal (String) en lugar de BigDecimal (double) . La diferencia entre ellos es: