我有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
关于我如何获得两个不同答案的任何信息将不胜感激。
最佳答案
在f#项目上运行干净,而不是在解决方案上对其进行修复。我不知道为什么无法使用解决方案正确清理它,但是清理项目会导致它重建并获得正确的结果。
关于c# - f#和C#获得基本数学的不同答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50627277/