代码之家  ›  专栏  ›  技术社区  ›  Bad Dub

尝试将Excel公式转换为C#

  •  1
  • Bad Dub  · 技术社区  · 5 年前

    我得到了这个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)
    

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

    PreSkillRating = 1600
    ChangeInRating = 50
    KFactor = 60
    

    我做错了什么?

    2 回复  |  直到 5 年前
        1
  •  4
  •   Christoph Bimminger    5 年前

    根据前面的评论和我的第一个答案,让我们总结一下:

    • 双除法打字
    • 战俘的论据顺序错误
    • 错误的方法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)
    
        2
  •  1
  •   Christoph Bimminger    5 年前

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

    否则,分割将作为整数分割执行,这将导致对每个步骤分别进行舍入操作。