У меня есть модуль 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
Любая информация о том, как я получаюдва разных ответа будут оценены.