两个int的百分比?

时间:2011-10-21 21:19:44

标签: java int decimal

我希望获得两个整数,一个除以另一个以获得小数或百分比。 如何获得这两个整数的百分比或小数? (我不确定它是不是......我可能会离开......) 例如:

int correct = 25;
int questionNum = 100;
float percent = correct/questionNum *100;

这就是我认为我能做到的,但是它不起作用......我想把十进制(如果有的话)变成100的百分比,例如在这种情况下它是%25。任何人的想法?

这是正确的代码(感谢Salvatore Previti!):

float correct = 25;
float questionNum = 100;
float percent = (correct * 100.0f) / questionNum;

(顺便说一下,我正在制作一个项目用于测验检查程序,这就是我需要百分比或小数的原因)

5 个答案:

答案 0 :(得分:77)

如果你不添加.0f,它将被视为一个整数,并且整数除法确实与浮点除法有很大不同:)

float percent = (n * 100.0f) / v;

如果你需要一个整数,你当然可以再次将floatdouble转换为整数。

int percent = (int)((n * 100.0f) / v);

如果您知道您的n值小于21474836(即(2 ^ 31/100)),则可以使用整数运算完成所有操作。

int percent = (n * 100) / v;

如果你得到NaN是因为你做了什么,你当然不能分为零......这没有意义。

答案 1 :(得分:14)

两个选项:

乘法后进行除法:

int n = 25;
int v = 100;
int percent = n * 100 / v;

在分割

之前将int转换为float
int n = 25;
int v = 100;
float percent = n * 100f / v;
//Or:
//  float percent = (float) n * 100 / v;
//  float percent = n * 100 / (float) v;

答案 2 :(得分:3)

其中一个必须是浮动进入。确保这一点的一种可能方法是:

float percent = (float) n/v * 100;

否则,你正在做integer division, which truncates the numbers。此外,除非double有充分理由,否则您应该使用float

您将遇到的下一个问题是,您的某些百分比可能看起来像24.9999999999999%而不是25%。这是由于浮点表示的精度损失。你也必须决定如何处理它。选项包括DecimalFormat来“修复”格式,或BigDecimal来表示确切的值。

答案 3 :(得分:0)

float percent = (n / (v * 1.0f)) *100

答案 4 :(得分:0)

将小数点设为百分比就可以了,

float percentage = (correct * 100.0f) / questionNum;