2010-06-09 55 views
5

上使用一些IronPython的腳本作爲插件,利用功能在C#編碼的項目。在我的C#類之一,我有一個屬性,它的類型是:C#/ IronPython的互操作和「浮動」數據類型

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的「雙」型,嘗試「浮動」一時興起,它工作得很好,給沒有錯誤。但現在,它的使用浮動兩端(它應該是從一開始就使用)它的錯誤,並認爲,C#代碼使用的是「單」數據類型?

我甚至在爲C#庫,果然對象瀏覽器檢查,它顯示爲使用「浮動式」,而不是「單次」

回答

7

我真的不看到一個問題在這裏,你很你自己都回答了很多。我想你只是在問,因爲你很困惑。因此,讓明確事情:

C#有兩個浮點類型:float(即短爲關鍵字System.SingleMSDN,32位長),並double(關鍵字爲System.DoubleMSDN中,64位長)。

的Python在另一側上使用float關鍵字/類型來存儲雙精度浮點數,作爲python documentation狀態:

浮點數使用雙實現 在C.所有投注在他們的除非您碰巧知道您正在使用的機器,否則精度會關閉。

爲此,在x86架構上,它是64位長。這是IronPython的對待蟒蛇float作爲.NET System.Double的原因。

也就是說,這兩種方法都將工作:

C#:

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

IronPython的:

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}) 
+0

謝謝你,完美的答案。和是的,我想我沒有那種已經鋪陳什麼映射了,我只是不知道爲什麼。 C#中的float不會在Python中浮動,這似乎與此相反。 – 2010-06-09 14:22:51

+0

歡迎你!我最近有一個類似的問題(C#/ Python Interop)。它確實很直覺,因爲所有的類C語言,Java和更多的使用'float'單精度的數字。 – 2010-06-09 14:30:16

相關問題