f # и c # получают разные ответы по основам математики - PullRequest
0 голосов
/ 31 мая 2018

У меня есть модуль 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 # слишком велика.Он не вычитал 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 голосов
/ 31 мая 2018

Чистый запуск в проекте f #, а не в решении проблемы.Я не знаю, почему он не очищается должным образом с помощью решения, но очистка проекта привела к его перестройке и получению правильного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...