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

在Java中,为什么两个整数的除法返回0.0?,java,floating-point,integer-division,Java,Floating Point,Integer Division,为什么它总是返回值0.0?我还想将其格式化为00.00格式并转换为字符串?因为转换为浮点是在除法完成后进行的。你需要: int totalOptCount = 500; int totalRespCount=1500; float percentage =(float)(totalOptCount/totalRespCount); 您应该能够使用以下内容设置格式: float percentage = ((float) totalOptCount) / totalRespCount; Ja

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

因为转换为浮点是在除法完成后进行的。你需要:

int totalOptCount = 500;
int totalRespCount=1500; 
float percentage =(float)(totalOptCount/totalRespCount);
您应该能够使用以下内容设置格式:

float percentage = ((float) totalOptCount) / totalRespCount;
Java中的整数除法(包括long、short、byte、char、int)总是返回一个int(或者long,如果其中一个参数是long),四舍五入到零。您的转换发生在此计算之后


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

如果您使用的是
int
值,则使用
双精度
可能是更好的选择,舍入误差更小
float
可以表示
int
值,且无误差高达约1600万
double
可以准确地表示所有
int

String.format("%2.02f", (float)totalOptCount/totalRespCount);
百分比通常乘以100,这意味着您可以放弃该角色

double percentage =(double) totalOptCount / totalRespCount;

要格式化double并按百分比打印,可以使用

double percentage = 100.0 * totalOptCount / totalRespCount;
(totalOptCount/totalRespCount)

在这里,被除数和除数都是
int
类型,这意味着它们只允许整数值,并且此类方程的答案将始终是整数文本。

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

(双倍)(500/1500)

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

(双精度)(0)


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

0.0

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


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

它存储在哪些变量中?查看展开代码,更好地解释这一点。我的代码只是告诉您如何在一行中完成这项工作,您可以将结果存储在一个变量中,如果您想要浮动(百分比)),在这个浮动中显示一个errorString str=String.format(“%2.02f”,(Float)percentage);就这样变了。它成功了,谢谢你,把100改成100.0成功了,为什么?我使用的是double。@luizfelippe一个常见的错误是执行整数运算并将结果转换为double或float。当
a
b
是整数时,您需要以双精度执行操作,即
(双精度)(a/b)
,这与您想要的后者不同。
double percentage = 100.0 * totalOptCount / totalRespCount;
System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));