为什么两个整数的除法在Java中返回0.0?

时间:2011-02-08 10:28:05

标签: java floating-point integer-division

int totalOptCount = 500;
int totalRespCount=1500; 
float percentage =(float)(totalOptCount/totalRespCount);

为什么这总是返回值0.0?另外我想将其格式化为00.00格式并转换为字符串?

6 个答案:

答案 0 :(得分:90)

因为在分割完成后转换为float。你需要:

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

您应该可以使用以下内容进行格式化:

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

答案 1 :(得分:12)

如果您使用int值,使用double可能是更好的选择,并且舍入错误更少。 float可以代表int值,而不会出现大约1600万的错误。 double可以准确地表示所有int值。

double percentage =(double) totalOptCount / totalRespCount;

百分比通常乘以100,这意味着你可以放弃演员。

double percentage = 100.0 * totalOptCount / totalRespCount;

答案 2 :(得分:3)

Java中的整数除法(包括long,short,byte,char,int)总是返回一个int(如果其中一个参数很长,则返回long),向零舍入。您在此计算后进行转换。

(格式化问题已经被其他答案回答了 - 或者您也可以查看java.text.NumberFormat,特别是java.text.DecimalFormat。)

答案 3 :(得分:2)

  

(totalOptCount/totalRespCount)

这里的被除数和除数都是int类型,这意味着它们只允许整数值,这个等式的答案总是一个整数字。

如果我打破这个,它将类似于下面的

  

(double)(500/1500)

根据实际计算,500/1500将给你0.33333但编译器会将其转换为整数字面值,因为两个操作数都是int类型

  

(double)(0)


编译器获取一条指令,将此0值转换为double,以便得到0.0

  

0.0

然后您可以将结果更改为@Zach Janicki建议的任何格式。

请记住,如果两个操作数的类型相同,那么结果也是相同的类型。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

格式化双精度并以百分比打印,您可以使用

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