2011-02-08 42 views

Respuesta

78

Porque la conversión a flotación ocurre después de que la división se ha realizado. Es necesario:

float percentage = ((float) totalOptCount)/totalRespCount; 

Usted debe ser capaz de dar formato a usar algo como:

String str = String.format("%2.02f", percentage); 
+0

Float (porcentaje) en este Float muestra un error – kiran

+0

String str = String.format ("% 2.02f", porcentaje (float)); cambiado así. funcionó, gracias desenrollar – kiran

1
String.format("%2.02f", (float)totalOptCount/totalRespCount); 
+0

dónde se almacena, en qué variable – kiran

+0

Mira el código de desenrollar, se explica mejor. Mi código era solo para decirte cómo hacerlo en una línea, puedes almacenar el resultado en una variable si quieres – Dalmas

2

La división entera (que incluye largos, cortos, byte, char, int) en Java siempre devuelve una int (o long, si uno de los parámetros es largo), redondeando hacia cero. Su conversión ocurre después de este cálculo.

(La pregunta de formato ya está contestada por las otras respuestas - Como alternativa también se puede echar un vistazo a java.text.NumberFormat, especialmente java.text.DecimalFormat.)

8

Si está utilizando int valores, usando a double puede ser una mejor opción y tiene menos errores de redondeo. float puede representar int valores sin error hasta ~ 16 millones. double puede representar con precisión todos los int valores.

double percentage =(double) totalOptCount/totalRespCount; 

Los porcentajes se multiplican por 100, lo que significa que puede soltar el modelo.

double percentage = 100.0 * totalOptCount/totalRespCount; 
+0

Cambiar 100 a 100.0 hizo el truco, ¿por qué es eso? Estoy usando el doble – luizfelippe

+1

@luizfelippe un error común es realizar una operación entera y convertir el resultado en un doble o flotar. Necesita realizar la operación como un doble, es decir, '(doble) (a/b)' cuando 'a' y' b' son enteros, no es lo mismo que '(doble) a/b' Desea el último. –

1

dar formato a una doble e imprimir en forma de porcentaje, puede utilizar el uso

System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%")); 
0

(totalOptCount/totalRespCount)

aquí tanto dividendo y el divisor son de tipo int lo que significa solo permitirán valores enteros y la respuesta de dicha ecuación siempre será un entero.

si rompo esto será algo parecido a continuación

(double)(500/1500)

De acuerdo con el cálculo real, 500/1500 le dará 0.33333 pero compilador convertir esto en literal entero debido a que ambos operandos son de tipo int

(double)(0)


compilador recibe una instrucción para emitir este valor 0 para duplicar por lo que tiene 0.0 como resultado

0.0

y luego puede cambiar el resultado a cualquier formato según lo sugerido por @Zach Janicki.

tenga en cuenta si los dos operandos son del mismo tipo que el resultado también será del mismo tipo.

Cuestiones relacionadas