Вы правы, что существует некоторая несогласованность в том, можно ли преобразовать BigInteger
с помощью функции decimal
или нет. Кажется, это зависит от версии .NET, для которой вы компилируете. Если вы используете компилятор F # (или интерактивный F #) из Visual Studio 2010, тогда целью по умолчанию является .NET 4.0. Для этой цели компиляция работает отлично:
C:\Temp>"C:\Program Files (x86)\Microsoft F#\v4.0\Fsc.exe" test.fs
Microsoft (R) F# 3.0 Compiler build 2.0.0.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
Вы можете изменить целевую платформу, явно указав версию .NET 2.0 mscorlib.dll
и FSharp.Core.dll
. Затем компилятор сообщает об ошибке, которую вы описали:
C:\Temp>"C:\Program Files (x86)\Microsoft F#\v4.0\Fsc.exe" test.fs --noframework
-r:C:\Program Files (x86)\FSharp-2.0.0.0\bin\FSharp.Core.dll
-r:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll
Microsoft (R) F# 3.0 Compiler build 2.0.0.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
test.fs(1,23): error FS0001: The type 'System.Numerics.BigInteger' does not support
a conversion to the type 'decimal'
Если вы получаете сообщение об ошибке при компиляции проекта, возможно, ваш проект настроен на компиляцию для .NET 2.0.