使用IronPython时如何处理C#小数?

使用IronPython时如何处理C#小数?,c#,python,decimal,ironpython,C#,Python,Decimal,Ironpython,我对IronPython和Python都是新手。我正在尝试使用C#小数和IronPython数学函数。当我试图返回参数的绝对值时,当参数是十进制时,我会得到一个类型异常。这是我的密码: [TestMethod] public void CallDecimal() { var pySrc = @"def MyAbs(arg): return abs(arg)"; // host python and execute script

我对IronPython和Python都是新手。我正在尝试使用C#小数和IronPython数学函数。当我试图返回参数的绝对值时,当参数是十进制时,我会得到一个类型异常。这是我的密码:

    [TestMethod]
    public void CallDecimal()
    {
        var pySrc =
@"def MyAbs(arg):
    return abs(arg)";

        // host python and execute script
        var engine = IronPython.Hosting.Python.CreateEngine();
        var scope = engine.CreateScope();
        engine.Execute(pySrc, scope);

        // get function with a strongly typed signature
        var myAbs = scope.GetVariable<Func<decimal, decimal>>("MyAbs");

        Assert.AreEqual(5m, myAbs(-5m));
    }
有接受小数的Python绝对值函数吗?如果不是,写一个容易吗?如果我可以指定函数参数的类型,我会尝试创建自己的abs函数,如下所示:

define abs(Decimal arg):
    return arg < 0 ? -arg : arg
定义abs(十进制参数):
返回arg<0-arg:arg

您始终可以选择导入.NET
数学类并使用其中的方法

var pySrc =
@"def MyAbs(arg):
    from System import Math
    return Math.Abs(arg)";

您可以编写一个与您给出的示例类似的简单函数
def my_abs(arg):如果arg>0,则返回arg-else-arg
@AnthonyHilyard有效!谢谢好奇的是,有没有办法用小数点来称呼内置abs?还是有一些十进制数学库可以处理C#小数
abs
很容易实现,但是
atan
不是您想要了解的。它提供了小数的atan函数以及许多其他函数。
var pySrc =
@"def MyAbs(arg):
    from System import Math
    return Math.Abs(arg)";