将我的(短)Python修复为C#算法端口
基于Reddit编写排序算法如下: 我很难把所有这些都整合在一起,因为有些系统。数学签名的应用不同将我的(短)Python修复为C#算法端口,c#,python,math,port,C#,Python,Math,Port,基于Reddit编写排序算法如下: 我很难把所有这些都整合在一起,因为有些系统。数学签名的应用不同 public class Calculation { protected DateTime Epoch = new DateTime(1970,1,1); protected int EpochSeconds(DateTime date) { var td = date - Epoch; return td.Days*86400 + td.
public class Calculation
{
protected DateTime Epoch = new DateTime(1970,1,1);
protected int EpochSeconds(DateTime date)
{
var td = date - Epoch;
return td.Days*86400 + td.Seconds + ((td.Milliseconds)/1000000);
}
protected int Score(int upVotes,int downVotes)
{
return upVotes - downVotes;
}
public int HotScore(int upVotes,int downVotes,DateTime date)
{
var s = Score(upVotes, downVotes);
var order = Math.Log(Math.Max(Math.Abs(s), 1), 10);
var sign = Math.Sign(s); //Edit from Jonathon Reinhart
var seconds = EpochSeconds(date) - 1134028003;
return Math.Round(order + sign + *seconds/45000, 7);
}
}
编辑以获取更多信息
具体地说,我在最后一行遇到了一个错误
return Math.Round(order + sign + *seconds/45000, 7);
//error "The * or -> operator must be applied to a pointer"
"
我能在方法签名中找到的最接近的匹配是:
我的一个建议是使用。因此:
好的,那么您对这一行有问题:
return Math.Round(order + sign + *seconds/45000, 7);
首先,你可能会在秒/45000
中丢失小数部分,因为它们都是int
。先将一个转换为两个:((双)秒/45000)
第二,你可能有一个语法错误sign+*seconds
。你是说+
还是*
?它认为你把seconds
当作指针来使用
最后,返回一个double
,但是您的HotScore
方法返回的是int
。我猜您希望它返回一个double
我猜这就是你想要的:
public double HotScore(int upVotes,int downVotes,DateTime date)
{
var score = Score(upVotes, downVotes);
var order = Math.Log(Math.Max(Math.Abs(score), 1), 10);
var sign = Math.Sign(score);
var seconds = EpochSeconds(date) - 1134028003;
return Math.Round(order + sign * ((double)seconds/45000), 7);
}
另外,我认为您的
EpochSeconds()
不正确。我根据以下内容改编:
我的一个建议是使用。因此:
好的,那么您对这一行有问题:
return Math.Round(order + sign + *seconds/45000, 7);
首先,你可能会在秒/45000
中丢失小数部分,因为它们都是int
。先将一个转换为两个:((双)秒/45000)
第二,你可能有一个语法错误sign+*seconds
。你是说+
还是*
?它认为你把seconds
当作指针来使用
最后,返回一个double
,但是您的HotScore
方法返回的是int
。我猜您希望它返回一个double
我猜这就是你想要的:
public double HotScore(int upVotes,int downVotes,DateTime date)
{
var score = Score(upVotes, downVotes);
var order = Math.Log(Math.Max(Math.Abs(score), 1), 10);
var sign = Math.Sign(score);
var seconds = EpochSeconds(date) - 1134028003;
return Math.Round(order + sign * ((double)seconds/45000), 7);
}
另外,我认为您的
EpochSeconds()
不正确。我根据以下内容改编:
最后一行出现语法错误-序列
+*
无效。我认为最后一行需要的是以下内容(使用):
最后一行出现语法错误-序列
+*
无效。我认为最后一行需要的是以下内容(使用):
到底是什么问题,或者您遇到了什么问题?如果可能的话,我想检查一般错误,但我还添加了特定的生成错误。Reddits有微秒,而您有毫秒。不知道这是否导致了问题,但这是一个问题。您遇到的确切编译器错误是什么?有人告诉我可能需要使用它如果没有上下文,问题到底是什么,或者您遇到了什么问题?如果可能的话,我想检查一般错误,但我还添加了特定的生成错误。Reddits有微秒,而您有毫秒。不知道这是否导致了问题,但这是一个问题。您遇到的编译器错误是什么?有人告诉我可能会需要在没有上下文的情况下使用此选项,谢谢。我可以只交换代码?似乎表示是。是的,请注意我链接到了文档,但用于
Int32
版本,而不是double
版本。谢谢。我可以只交换代码?似乎表示是。是的,请注意我链接到了文档,但用于Int32
version,而不是double
版本。
public long GetEpochTime(DateTime dt)
{
var ts = dt.Subtract(Convert.ToDateTime("1/1/1970 8:00:00 AM"));
return ((((((ts.Days * 24) + ts.Hours) * 60) + ts.Minutes) * 60) + ts.Seconds);
}
return Math.Round(order + sign * ((double)seconds / 45000), 7);