我有f#模块
open System
module Scores =
let DbToContinuous input = (((input / 1000) - 1) * 100) + (input % 1000)
这是整个模块(到目前为止)
我有一个C#函数,它本来要替换(看起来非常相似)。
private static int DbToRealScore(int dbScore)
{
return ((dbScore / 1000) - 1) * 100 + (dbScore % 1000);
}
然而,出了点问题。这两者没有产生相同的结果。
切换回C#版本,我用以下内容对其进行了扩充:
private static int DbToRealScore(int dbScore)
{
var x = Scores.DbToContinuous(dbScore);
var y = ((dbScore / 1000) - 1) * 100 + (dbScore % 1000);
if (x != y)
{
throw new Exception($"Math error: [input: {dbScore}, x: {x}, y:{y}]");
}
return y;
}
对于4100
的输入,我收到错误消息Math error: [input: 4100, x: 500, y:400]
,证明f#版本为100太大。它没有减去1。
更奇怪的是,当我使用f#交互式控制台时,f#代码按预期工作...
> let y x = (((x / 1000) - 1) * 100) + (x % 1000);;
val y : x:int -> int
> y 4000;;
val it : int = 300
> y 4100;;
val it : int = 400
有关我如何获得两个不同答案的任何信息都将不胜感激。
答案 0 :(得分:1)
在f#项目上运行clean,而不是解决方案修复它。我不知道为什么它没有得到适当的解决方案清理,但清理项目导致它重建并获得正确的结果。