尝试将Excel公式转换为C#

时间:2019-03-07 21:37:30

标签: c# excel excel-formula equation-solving

我有这个Excel公式,正在努力将其转换为c#。

“力量”和“日志”部分使我感到震惊。

excel公式如下:

LOG((10^(PreSkillRating/400)/((-ChangeInRating/KFactor)+1)-10^(PreSkillRating/400)))*400/LOG(10)

到目前为止,我有这个:

Math.Log((Math.Pow(PreSkillRating / 400, 10)) / (((ChangeInRating * -1) / KFactor) + 1) - Math.Pow((PreSkillRating / 400), 10)) * 400 / Math.Log(10)

我还知道,除法操作必须停止以尝试除以0的错误。

例如,当我对每个变量使用以下值时,我得到1879.588002作为excel中的答案,而在c#中为无穷。

PreSkillRating = 1600
ChangeInRating = 50
KFactor = 60

我在做什么错了?

2 个答案:

答案 0 :(得分:4)

基于早期的评论和我的第一个答案,让我们总结一下:

  • 类型转换为双重划分
  • Pow的参数顺序错误
  • 错误的方法Math.Log(x)。您可以使用Math.Log(x,10)或Math.Log10(x)

尝试以下实现:

Math.Log10((Math.Pow(10, (double)PreSkillRating / 400)) / (((ChangeInRating * -1.0) / KFactor) + 1) - Math.Pow(10, (double)PreSkillRating / 400)) * 400 / Math.Log10(10)

答案 1 :(得分:1)

您的变量是int值吗? 然后,您必须添加一个类型转换。参见Division in C# to get exact value

否则,除法将作为整数除法执行,这将导致每个步骤分别进行舍入运算。