round - redondear a 4 decimales en java
¿Cómo obtener los números después del punto decimal?(java) (3)
Esta pregunta ya tiene una respuesta aquí:
double d = 4.321562;
¿Hay una manera fácil de extraer el 0.321562 en su propio d? Intenté buscar en la clase de matemáticas pero no tuve suerte. Si esto se puede hacer sin convertirlo en una cadena o lanzarlo a otra cosa, incluso mejor.
Bueno, puedes usar:
double x = d - Math.floor(d);
Tenga en cuenta que debido a la forma en que funciona el punto flotante binario, eso no le dará exactamente 0.321562, ya que el valor original no es exactamente 4.321562. Si realmente estás interesado en los dígitos exactos, deberías usar BigDecimal
en BigDecimal
lugar.
Otra forma de obtener la fracción sin usar Matemáticas es lanzar un largo.
double x = d - (long) d;
Cuando imprima un double
el toString realizará una pequeña cantidad de redondeo para que no vea ningún error de redondeo. Sin embargo, cuando elimina la parte entera, el redondeo ya no es suficiente y el error de redondeo se vuelve obvio.
La forma de evitar esto es hacer el redondeo usted mismo o usar BigDecimal, que le permite controlar el redondeo.
double d = 4.321562;
System.out.println("Double value from toString " + d);
System.out.println("Exact representation " + new BigDecimal(d));
double x = d - (long) d;
System.out.println("Fraction from toString " + x);
System.out.println("Exact value of fraction " + new BigDecimal(x));
System.out.printf("Rounded to 6 places %.6f%n", x);
double x2 = Math.round(x * 1e9) / 1e9;
System.out.println("After rounding to 9 places toString " + x2);
System.out.println("After rounding to 9 places, exact value " + new BigDecimal(x2));
huellas dactilares
Double value from toString 4.321562
Exact representation 4.321562000000000125510268844664096832275390625
Fraction from toString 0.3215620000000001
Exact value of fraction 0.321562000000000125510268844664096832275390625
Rounded to 6 places 0.321562
After rounding to 9 places toString 0.321562
After rounding to 9 places, exact value 0.32156200000000001448796638214844278991222381591796875
Usar modulo
double d = 3.123 % 1;
assertEquals(0.123, d,0.000001);