我想我需要投射此代码。我需要返回一个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;
}
答案 0 :(得分:1)
从double转换为int将始终截断,因此可能不完全是您所追求的。也就是说,(int)3.812会给你3,当你可能想要4时。
你也不需要强制转换为double,因为“int + int * double”会返回一个double。
最简单的方法是使用Math.round,它会将更大的值向上舍入。请注意,双打是长到一半,然后浮动到整数。
Floats几乎肯定能为您提供所需的精确度,因此最简单的解决方案是:
brains = Math.round(brains - this.getBrains() * 0.01f);
编辑:如果你确实想要双精度提供更高的精度,那么Math.round会给你一个长的,你需要把它转换成一个int:
brains = (int)Math.round(brains - this.getBrains() * 0.01d);
请注意,常量已从0.01f
更改为0.01d
,从而更改整个计算的精度。
答案 1 :(得分:0)
假设你要减去第100个大脑。你可以用不同的方式做到这一点:
brains = brains - (this.getBrains() / 100);
brains = brains - (int)((double)this.getBrains() * 0.01 + 0.5);
当然,如果你愿意的话,第一种方法总是可以用铸造完成,而且我不确定两次铸造是否比整数除法更快或更慢。
由于attack
是一个整数且返回值也是如此,因此您无需转换返回值。
答案 2 :(得分:0)
如果同一表达式中存在更大的数据类型,Java会自动提升较小的数据类型。如果你这样做:
brains = brains + (other.getBrains() * 0.01);
您根本不需要显式转换为double,因为0.01是double,并且首先计算表达式的那部分(括号/乘法)。如果brains
是一个int,则需要将表达式转换回int以进行赋值。这样做:
brains = (int)Math.rint(brains + (other.getBrains() * 0.01));
当然要确保你的整数不小(对于你正在进行的操作而言<100)。