2010-06-09 3 views
5

IronPython 스크립트를 플러그인으로 사용하고 C#으로 코딩 된 기능을 활용하는 프로젝트에서 작업합니다. 때이 비트, 그러나C#/IronPython Interop 및 "float"데이터 형식

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

:이 같은 IronPython의 코드에서 해당 속성의 값을 설정

Dictionary<int, float> 

: 내 C# 클래스 중 하나, 나는 유형 인 속성을 가지고 코드가 실행될 때, 그것은 다음과 같은 예외가 발생합니다 :

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을 사용하여 양쪽 끝 (처음부터 사용 했어야 함)에서 오류가 발생하고 C# 코드가 "단일"데이터 형식을 사용한다고 생각합니까?!

심지어는 C# 라이브러리와, 과연 대한 개체 브라우저에서 확인했습니다, 그것은 당신을 매우, 정말 여기에 질문을 참조 해달라고 "싱글"

답변

7

을은 "부동"형식을 사용하지으로 표시 많은 것은 너 자신 모두에 응답했다. 네가 혼란스러워서 네가 묻는 것 같아.

C 번호는 두 개의 부동 소수점 유형이 있습니다 : 그래서 정리 일을 할 수 float (대한 짧은 키워드를 System.SingleMSDN, 32 비트 길이) 및 double (System.DoubleMSDN에 대한 키워드, 64 비트 길이). 반대편에

파이썬은 python documentation 상태로, 부동 소수점 숫자로 배정 밀도를 저장하기 위해 float 키워드/유형을 사용

부동 소수점 숫자가 모든 베팅에 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에서 플로트되지 않을 것이라고 카운터의 직설적 인 것처럼 보였습니다. –

+0

오신 것을 환영합니다! 최근 비슷한 문제가 발생했습니다 (C#/Python Interop). 실제로 C와 비슷한 모든 언어와 마찬가지로 직관적 인 직관력을 가진 Java와 더 많은 사람들은 단 정밀도를 위해'float '을 사용합니다. –