为什么关闭这个等式?

时间:2013-12-22 07:14:09

标签: c# wpf

我有以下等式来计算一些东西:

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.
我是否遗漏了格式化的内容?

2 个答案:

答案 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