我有以下等式来计算一些东西:
int stat = Convert.ToInt32(Math.Floor((double)(((IV + 2 * BaseStat + Math.Floor((double)(EV / 4))) * Level / 100) + 5) * NatureValue));
当我使用以下值时,应该是结果。
IV = 0
BaseStat = 28
EV = 0
Level = 23
NatureValue = 0.9
结果是16.
我是否遗漏了格式化的内容?
答案 0 :(得分:2)
您对Math.Floor((double)EV / 4)
的调用导致整个表达式被评估为double
:
(((IV + 2 * BaseStat + Math.Floor((double)(EV / 4))) * Level / 100) + 5)
这计算为
(((0 + 2 * 28 + (double)0 ))) * 23 / 100 + 5)
评估为17.88。 17.88 * 0.9 = 16.092,向下舍入到16。
答案 1 :(得分:2)
您的代码无法读取!将它拆分成一些部分,修复括号位置(我猜有一个错误)我想你应该得到这样的东西:
var var1 = IV + 2 * BaseStat + Math.Floor((double)(EV / 4)); // 0 + 56 + 0 = 56
var var2 = (double)(var1 * Level / 100) + 5; // 17.88
int stat = Convert.ToInt32(Math.Floor(var2) * NatureValue); // 17*0.9 = 15,3
// here you are! 15