代码之家  ›  专栏  ›  技术社区  ›  Adam Haile

C#/IronPython互操作和“float”数据类型

  •  5
  • Adam Haile  · 技术社区  · 15 年前

    Dictionary<int, float>
    

    我从IronPython代码中设置该属性的值,如下所示:

    mc = MyClass()
    mc.ValueDictionary = Dictionary[int, float]({1:0.0, 2:0.012, 3:0.024})
    

    Microsoft.Scripting.ArgumentTypeException was unhandled by user code
      Message=expected Dictionary[int, Single], got Dictionary[int, float]
    

    为了让事情变得更奇怪,最初使用的是C#代码

    Dictionary<int, double>
    

    但我在IronPython中找不到“double”类型,一时兴起尝试了“float”,结果很好,没有出现错误。但是现在它在两端都使用float(从一开始就应该使用float),它会出错,并认为C代码使用的是“Single”数据类型?!

    我甚至在对象浏览器中检查了C#库,果然,它显示为使用“float”类型而不是“Single”

    1 回复  |  直到 15 年前
        1
  •  7
  •   Philip Daubmeier    15 年前

    我真的看不出有什么问题,你自己都回答了。我猜你只是问因为你很困惑。让我们把事情弄清楚:

    C#有两种浮点类型: float (一个关键字,是 System.Single MSDN double (关键字为 System.Double MSDN ,64位长)。

    另一边的Python使用 关键字/类型来存储双精度浮点数,作为 python documentation 国家:

    实现浮点数

    因此,在x86体系结构上,它是64位长的。这就是IronPython对待python的原因 浮动 作为.NET .

    也就是说,这两种方法都会奏效:

    C#:

    Dictionary<int, float> single_precision_dict;
    Dictionary<int, double> double_precision_dict;
    

    铁蟒:

    single_precision_dict = Dictionary[int, Single]({1:0.0, 2:0.012, 3:0.024})
    double_precision_dict = Dictionary[int, float]({1:0.0, 2:0.012, 3:0.024})