【问题标题】:How do you calculate percentages in Java?你如何在Java中计算百分比?
【发布时间】:2015-11-10 02:18:57
【问题描述】:

所以我正在尝试为玩家制作一个带有健康栏的游戏,但每当我使用叉积或任何其他应该有效的数学方法时,百分比结果都是0.0... 这是处理此问题的 .java 文件:

package com.game.graphics;

import com.game.entity.mob.Mob;

public class HUD {
    Mob target;
    Sprite healthbar;
    Sprite bgBar;

    double percent_normal;

    public HUD(Mob target) {
        this.target = target;
        bgBar = new Sprite(0xff777777, 104, 8);
        healthbar = new Sprite(0xffFF0000, 100, 6);
    }

    public void update() {
        percent_normal = target.getHealth() / 100;
        percent_normal *= target.getMaxHealth();
    }

    public void printData() {
        System.out.println("Normal(" + percent_normal + ")");
    // if the targets's health is any lower than the max health then this seems to always return 0
    }

    public void render(Screen s) {
        s.renderSprite(5, 5, bgBar, false);
        s.renderSprite(7, 6, new Sprite(0xffFF0000, (int) percent_normal, 6), false);
    }
}

我不确定我的数学是否完全关闭,或者我是否正在处理这个可怕的错误。我已经尝试查找如何计算它无济于事,所以这就是我在这里提出这个问题的原因。

【问题讨论】:

标签: java math


【解决方案1】:

不应该是这样吗? :

public void update() {
    percent_normal = target.getHealth() / target.getMaxHealth();
    percent_normal *= 100;
}

例如: 玩家有 120 点生命值,最大生命值是 180。这是 120 / 180 = 0.66666666666 以百分比形式给出 0.66666666666 * 100 = 66,66...% 而不是 120 / 100 = 1.2 并将其乘以 target.getMaxHealth() 即 180,结果为 (1.2 * 180) > 100

【讨论】:

  • @sircapsalot 这是一个完全真实的运营商,而不是信仰问题。第一次除法需要对 health 或 maxHealth 进行双重转换(因为它们可能是整数)以避免整数除法和 0 结果。
  • @sircapsalot 这不是信仰问题。您只需要打开 JLS 并检查即可。
  • 抱歉,我查看的是 this page,其中不包括 *=this one 确实:)
  • @RishavKundu 为 sircapsalot 辩护,并不是因为您在 Java 方面有丰富的经验,所以您通常使用 *= 运算符。
  • @sircapsalot 是的,抱歉,这是一句愚蠢的话:/我道歉
【解决方案2】:

您计算百分比的方式似乎不对。 要计算 X 与 Y 的百分比,您必须这样做:

double result = X/Y;
result = result * 100;

所以在这种情况下你的代码应该是这样的

public void update() {
    percent_normal = target.getHealth() / target.getMaxHealth();
    percent_normal *= 100;
}

您总是得到 0.0 的原因是因为 int 100。我相信 target.getHealth()/100 将返回一个 0.x 形式的值,并且在转换为 double 之前将转换为 int 0。

【讨论】:

  • 我试过这个。 (非常感谢您解释它为什么会这样工作!)这就是我现在所拥有的,而且效果很好:link
  • 很高兴您的问题已得到解决!你能接受其中一个答案来帮助可能有同样问题的人吗?
【解决方案3】:

基本上我们用这个来计算百分比,

百分比 = (a / b) * 100

所以在你的情况下 update() 方法是错误的,用下面的代码替换,

public void update()
{
    percent_normal = target.getHealth() / target.getMaxHealth();
    percent_normal * = 100;
}

这是一个例子,仅供参考 - https://www.flowerbrackets.com/java-calculate-percentage/

【讨论】:

    猜你喜欢
    • 2022-10-31
    • 1970-01-01
    • 2021-04-12
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多