pregunta:
Al realizar la operación en dos tipos dobles de valores, a veces habrá problemas con valores de resultados anormales. Por ejemplo:
System.out.println (19.99+20); System.out.println (1.0-0.66); System.out.println (0.033*100); System.out.println (12.3/100);
Producción:
39.989999999999999999995
0.33999999999999999999997
3.30000000000000000003
0.12300000000000000001
Solución:
Los tipos de puntos flotantes simples flotan y duplican en Java no pueden realizar operaciones porque es normal en la mayoría de los casos, pero ocasionalmente se producen problemas como se muestra arriba. Este problema en realidad no es un error en Java, porque la computadora en sí es binaria, y los números de punto flotante son en realidad solo valores aproximados. Por lo tanto, cuando se convierte de números de punto flotante binario a decimal, la precisión se pierde fácilmente, lo que resulta en una disminución en la precisión.
Para garantizar la precisión, debe usar la clase BigDecimal, y no puede convertir directamente de doble a BigDecimal. Debe convertir el doble en cadena y luego BigDecimal. Es decir, no puede usar el método BigDecimal (doble val), y encontrará que no hay efecto. Para usar el método BigDecimal (String Val). Se muestran ejemplos específicos a continuación.
Ejemplos de cuatro operaciones de doble tipo:
1. Agregar
public static double add (doble a1, doble b1) {bigDecimal a2 = new BigDecimal (double.ToString (A1)); BigDecimal B2 = new BigDecimal (doble.ToString (B1)); return a2.add (b2) .DoubleValue (); }2. Resta
Public static double sub (doble a1, doble b1) {bigDecimal a2 = new BigDecimal (double.ToString (A1)); BigDecimal B2 = new BigDecimal (doble.ToString (B1)); return a2.subtract (B2) .DoubleValue (); }3. Multiplicar
public static double mul (doble a1, doble b1) {bigDecimal a2 = new BigDecimal (double.ToString (A1)); BigDecimal B2 = new BigDecimal (doble.ToString (B1)); return a2.multiply (b2) .DoubleValue (); }4. Descomposición
public static double div (doble a1, doble b1, int escala) {if (escala <0) {tirar nueva ilegalArgumentException ("error"); } BigDecimal a2 = new BigDecimal (Double.ToString (a1)); BigDecimal B2 = new BigDecimal (doble.ToString (B1)); return a2.divide (b2, escala, bigDecimal.round_half_up) .DoubleValue (); }Cuando el parámetro de escala se divide en incompleto, especifique la precisión.
La solución al resultado de la operación anormal del tipo doble en Java es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.