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

kir*_*ran 49 java floating-point integer-division

int totalOptCount = 500;
int totalRespCount=1500; 
float percentage =(float)(totalOptCount/totalRespCount);
Run Code Online (Sandbox Code Playgroud)

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

unw*_*ind 93

因为转换为浮动发生在除法完成之后.你需要:

float percentage = ((float) totalOptCount) / totalRespCount;
Run Code Online (Sandbox Code Playgroud)

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

String str = String.format("%2.02f", percentage);
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 12

如果您正在使用int值,则使用a double可能是更好的选择并且具有更少的舍入误差. float可以表示int没有错误的值达到约1600万.double可以准确地表示所有int值.

double percentage =(double) totalOptCount / totalRespCount;
Run Code Online (Sandbox Code Playgroud)

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

double percentage = 100.0 * totalOptCount / totalRespCount;
Run Code Online (Sandbox Code Playgroud)


小智 6

(totalOptCount/totalRespCount)

这里被除数和除数都属于类型int,这意味着它们只允许整数值,并且此类等式的答案将始终是整数文字。

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

(double)(500/1500)

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

(double)(0)


编译器收到一条指令将此0值转换为双倍,因此您得到了0.0结果

0.0

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

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