C#/ IronPython Interop和“float”数据类型

时间:2010-06-09 13:18:06

标签: c# ironpython c#-4.0

使用一些IronPython脚本作为插件,使用C#编码的功能。在我的一个C#类中,我有一个类型为的属性:

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中找不到“双”类型,一想到就“浮动”并且它工作正常,没有错误。但是现在它在两端都使用了float(应该从一开始就使用它),它会出错,并认为C#代码使用的是“Single”数据类型?!

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

1 个答案:

答案 0 :(得分:7)

我真的没有在这里看到一个问题,你自己也非常回答了一切。我想你只是在问,因为你很困惑。所以我们要澄清一下:

C#有两种浮点类型:floatSystem.Single MSDN,32位长的关键字)和double({{1}的关键字} MSDN,64位长)。

另一方面,Python使用System.Double关键字/类型来存储双精度浮点数,如python documentation所示:

  

实施浮点数   在C中使用double。除非你碰巧知道你正在使用的机器,否则所有关于它们精度的投注都会被取消。

为此,在x86架构上,它是64位长。这就是IronPython将python float视为.NET float的原因。

尽管如此,这两种方法都有效:

C#:

System.Double

IronPython的:

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