2014-11-07 2 views
1

나는 컴파일러 오류가 발생하고있다 :중개 Windows 런타임 구성 요소 System.Decimal

유효한 Windows 런타임 만 반환해야되지 System.Decimal System.Decimal ""방법의 XXX 유형의 매개 변수 값이 "". " Windows 런타임 유형. "

어쨌든 10 진수를 사용할 수 있습니까? 아니면 그냥 값을 센트로 정수로 저장해야합니까?

+0

같은 주제 (재정상의 응용 프로그램에서 십진법과 이중 문항의 문제)는 같은 주제에 대한 다른 질문의 수로 나타납니다. http://stackoverflow.com/search?q=double+versus+decimal 짧은 대답은 "하지 마라"입니다. 당신은 사용자 지정 고정 소수점 데이터 형식을 사용하는 것이 더 낫습니다. WinRT에서 제외시킨 많은 것들이 내 마음을 괴롭 힙니다. System.Decimal은 분명히 그 중 하나입니다. –

+0

글쎄, 돈을 위해 Decimal을 사용해야합니다. 내 중개 런타임 구성 요소에 Decimal을 사용할 수없는 이유에 대해 다소 괴롭힘을 당했다고 생각합니다. 이 맞춤형 고정 소수점 데이터 형식을 확장 할 수 있습니까? –

+0

사용할 수있는 경우 돈을 위해 Decimal을 사용해야합니다. 부동 소수점 형식으로 존재하는 반올림 오류를 해결합니다. 고정 소수점을 연구 할 수 있습니다. 웹에 많은 것들이 있습니다. 짧은 버전은 예를 들어 페니 또는 페니의 100 분의 1을 나타내는 정수를 유지할 수 있습니다. 덧셈/뺄셈은 정상적으로 작동합니다. 물론 곱셈과 나눗셈을 위해 소수점의 움직임을 추적해야합니다. –

답변

0

가장 쉬운 해결책은 정수로 센트로 저장하는 것이 었습니다.

나는 이것이 세계의 모든 통화에 대해 작동하지 않을 수도 있다고 생각하지만 나는이 특별한 시나리오의 문제가 아닌 달러에만 관심이있다.

대안은 "돈"패턴을 구현하는 것입니다 - 사실 http://martinfowler.com/eaaCatalog/money.html

0

을, 나는 가장 쉬운 방법은 내 WinRT 구성 요소의 반환 값과 매개 변수에 대한 double을 사용하는 것입니다 발견했다.

내가이 내 자바 스크립트 코드에서 호출 할 내가 래퍼로서 생성 된 C# Windows 런타임 휴대용 클래스 라이브러리의 코드가

public static double Round(double value, int digits) 
{ 
    // do stuff 
} 

내 C# 클래스 라이브러리에있는 것입니다

public static double Round(double val, int digits) 
{ 
    return MyCSharpClassLib.Class.Round(val, digits); 
} 

그리고 내 자바 스크립트 프로젝트에서,이 내가 승을

var round = WindowsRuntimeWrapper.Class1.round(3.1415926549, 3); 

전화 그리고 무엇 오크들은 잘 됐어!

관련 문제