tipos realizar operacion metodo entera ejemplo divisiones decimales datos con calculos java floating-point division integer-division

java - realizar - ¿Por qué el código de división entero da la respuesta incorrecta?



realizar divisiones en java (4)

Tengo una división muy simple en Java (es una cantidad de producto / producción por hora), sin embargo cada vez que hago esta división obtengo errores extraños:

float res = quantity / standard;

He intentado la división anterior con varios valores y siempre recibo errores, sin embargo, el que he probado en todos los demás lugares y he acertado fue este:

En todas partes del mundo:

13.6 = 6800 / 500;

Java:

13.0 = 6800 / 500;

Investigué BigDecimal y BigInteger, sin embargo, no encontré una forma de crear esta división con ellos, ¿hay alguna otra forma de hacer esta división en Java sin tener errores de precisión?

Cualquier ayuda será apreciada.


En mi caso, yo estaba haciendo esto:

double a = (double) (MAX_BANDWIDTH_SHARED_MB/(qCount+1));

En lugar de lo "correcto":

double a = (double)MAX_BANDWIDTH_SHARED_MB/(qCount+1);


Estás dividiendo números enteros, lo que significa que estás usando la división de enteros .

En la división de enteros, la parte fraccional del resultado se descarta.

Pruebe lo siguiente:

float res = (float) quantity / standard; ^^^^^^^

Lo anterior obliga al numerador a tratarse como un float que a su vez promueve que el denominador flote también, y se realiza una división flotante en lugar de una división int.

Tenga en cuenta que si está tratando con literales, puede cambiar

float f = 6800 / 500;

para incluir el sufijo f para hacer que el denominador sea flotante:

float f = 6800f / 500; ^


Si le preocupa la precisión, le sugiero que use el double que tiene más del doble del número de dígitos de precisión. Sin embargo, el punto flotante solo representa con precisión fracciones que son una suma o potencias de 0.5. Esto significa que 0.6 solo está aproximadamente representado. Esto no tiene que ser un problema con el redondeo apropiado.

double d = (double) 6800 / 500;

o

double d = 6800.0 / 500;


hola pruebe esto puede ayudar a cumplir su requisito

double percent=(7819140000l-3805200000l)*100f/7819140000l; public String format_Decimal(double decimalNumber) { NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(5); nf.setMinimumFractionDigits(2); nf.setRoundingMode(RoundingMode.HALF_UP); String x = nf.format(decimalNumber); return x; }