truncar round redondear numeros limitar declarar decimales como java math numbers double decimal-point

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);