使用一些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”
答案 0 :(得分:7)
我真的没有在这里看到一个问题,你自己也非常回答了一切。我想你只是在问,因为你很困惑。所以我们要澄清一下:
C#有两种浮点类型:float
(System.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;