f#和c#获得基本数学的不同答案

时间:2018-05-31 14:59:26

标签: c# math f#

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

有关我如何获得两个不同答案的任何信息都将不胜感激。

1 个答案:

答案 0 :(得分:1)

在f#项目上运行clean,而不是解决方案修复它。我不知道为什么它没有得到适当的解决方案清理,但清理项目导致它重建并获得正确的结果。