我有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/

10-11 17:30