1

我想我需要转换这段代码。我需要返回一个 int 但我必须乘以百分比并且不希望它们被切断。
我应该像这样投射它还brains = (double)brains - (this.getBrains() * 0.01);
应该在最后投射return语句吗?我在选角方面很弱,我一直在努力寻找帮助的例子,但他们没有帮助。

          if(attacker >= attackee)
            {
            switch (weapon)
                {
                    case 't':
                        brains = brains + (other.getBrains() * 0.01);
                        attack = other.getBrains() * -0.01;
                        other.addBrains(attack); 
                        break;

                    case 's':
                        brains = brains + (other.getBrains() * 0.05);
                        attack = other.getBrains() * -0.05;
                        other.addBrains(attack); 
                        break;  

                    case 'c':
                        brains = brains + (other.getBrains() * 0.10);
                        attack = other.getBrains() * -0.10;
                        other.addBrains(attack); 
                        break;  

                    case 'k':
                        brains = brains + (other.getBrains() * 0.20);
                        attack = other.getBrains() * -0.20;
                        other.addBrains(attack); 
                        break;
                }
         }
        else 
            {
                switch (weapon)
                {
                    case 't':
                        brains = brains - (this.getBrains() * 0.01);
                        attack = this.getBrains() * 0.01;
                        other.addBrains(attack);
                        break;

                    case 's':
                        brains = brains - (this.getBrains() * 0.01);
                        attack = this.getBrains() * 0.01;
                        other.addBrains(attack);
                        break;  

                    case 'c':
                        brains = brains - (this.getBrains() * 0.01);
                        attack = this.getBrains() * 0.01;
                        other.addBrains(attack);
                        break;

                    case 'k':
                        brains = brains - (this.getBrains() * 0.01);
                        attack = this.getBrains() * 0.01;
                        other.addBrains(attack);
                        break;      
                }
            }                   
    return attack;
}
4

3 回答 3

1

从 double 转换为 int 总是会被截断,所以可能不是你所追求的。也就是说, (int)3.812 会给你 3,而你可能想要 4。

您也不需要转换为 double,因为“int + int * double”将返回一个 double。

最简单的方法是使用 Math.round,它将较大的值向上舍入。请注意,双整数舍入为长整数,但浮点数舍入为整数。

浮点数几乎肯定会为您提供所需的精度,因此最简单的解决方案是:

brains = Math.round(brains - this.getBrains() * 0.01f);

编辑:如果你确实想要双打所提供的更高的精度,那么 Math.round 会给你一个 long,你需要将它转换为一个 int:

brains = (int)Math.round(brains - this.getBrains() * 0.01d); 

请注意,常数已从更改0.01f0.01d更改整个计算的精度。

于 2013-11-11T23:58:10.930 回答
0

假设你想减去百分之一的大脑。您可以通过不同的方式做到这一点:

  • 围捕:brains = brains - (this.getBrains() / 100);
  • 四舍五入到最近的大脑:brains = brains - (int)((double)this.getBrains() * 0.01 + 0.5);

当然,如果您愿意,第一种方法总是可以通过强制转换来完成,而且我不确定强制转换两次是否比整数除法更快或更慢。

由于attack是一个整数并且返回值也是,所以您不需要转换返回值。

于 2013-11-11T23:56:52.937 回答
0

如果同一表达式中存在较大的数据类型,Java 会自动提升较小的数据类型。如果你这样做:

brains = brains + (other.getBrains() * 0.01);

您根本不需要显式转换为双精度数,因为 0.01 是双精度数,并且首先计算表达式的该部分(括号/乘法)。如果brains是 int,则需要将表达式转换回 int 以进行分配。像这样做:

brains = (int)Math.rint(brains + (other.getBrains() * 0.01));

当然,请确保您的整数不小(您正在执行的操作小于 100)。

于 2013-11-12T00:01:48.300 回答