为什么两个整数的分割在Java中返回0.0?

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

为什么总是返回值0.0? 我也想格式化成00.00格式并转换成字符串?

因为转换为浮动发生在分割完成之后。 你需要:

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

你应该能够使用像这样的格式:

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

如果使用int值,则使用double可能是更好的选择,并且舍入误差更小。 float可以表示int值,而不会出现错误,高达1600万。 double可以准确地表示所有的int值。

 double percentage =(double) totalOptCount / totalRespCount; 

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

 double percentage = 100.0 * totalOptCount / totalRespCount; 

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

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

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

要格式化一个double并打印出来,可以使用use

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

(totalOptCount/totalRespCount)

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

如果我打破这个,就像下面这样

(double)(500/1500)

根据实际计算,500/1500会给你0.33333,但是编译器会把它转换成整型文字,因为两个操作数的类型都是int

(double)(0)

编译器得到一个指令,把这个0值加倍,所以你的结果为0.0

0.0

然后你可以把结果改成@Zach Janicki的建议格式。

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