用于计算百分比的Java算术

use*_*828 2 java math

我的java应用程序中有一点问题.

我必须计算他们完成后的分数,我使用这种方法:

public Float ScoreProcent(int questions, int correct){
    Float x = new Float(questions);
    Float y = new Float(correct);

    Float num = (float) (100 / questions * correct);
    return num;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我有38个问题且38个是正确的时,它显示76个.

Jon*_*eet 8

首先,你不应该在Float所有地方使用 - 你想要的float; 没有必要在这里拳击.

其次,你不使用x,并y在所有.

第三,我会说你表达方程式的方式至少令人困惑.有可能只是改变x并且y会很好,但我不会 - 我会改变你表达自己的整个方式.

第四,通过在PascalCase中编写方法名称来违反Java命名约定.你也有拼写错误.

修复所有这些,你最终得到的结论是:

public static float getPercentageCorrect(int questions, int correct) {
    float proportionCorrect = ((float) correct) / ((float) questions);
    return proportionCorrect * 100;
}
Run Code Online (Sandbox Code Playgroud)

我实际上概括了这一点 - 它不是特定的"正确答案",所以可以用于任何总分中得分的东西:

/**
 * Returns a proportion (n out of a total) as a percentage, in a float.
 */
public static float getPercentage(int n, int total) {
    float proportion = ((float) n) / ((float) total);
    return proportion * 100;
}
Run Code Online (Sandbox Code Playgroud)

如评论中所述,这可以写成:

float proportion = (float) n / total;
Run Code Online (Sandbox Code Playgroud)

...但是你需要知道验证它的优先规则.我明确地包含了两个强制转换,以明确我想要将每个操作数转换为除法float 之前.


Pet*_*hev 6

试试这个.

float num = (correct * 100.0) / questions;
Run Code Online (Sandbox Code Playgroud)