2014-03-05 2 views
3

일반 클래스 라이브러리에서 내 기능을 PCL로 변환 중입니다. 일반 C# 클래스 라이브러리에서 10 진수를 반올림하기 위해 math.Round 함수에 3 개의 매개 변수를 전달할 수 있습니다. 은 이전에 우리는PCL에서 Math.Round 함수

Math.Round(value,digit, MidpointRounding.AwayFromZero) . 

을 다음과 같이 math.Round을 사용했지만 PCL에서 나는 "MidpointRounding.AwayFromZero"열거 내가 PCL에서 동일한 작업을 수행 할 available.Can되지 않는 것을 볼 수 있습니까?

내 PCL을 ".NET 프레임 워크 4.5", "Xamarin.IOs", "Xmarain.Android"및 Silverlight 5로 타겟팅하고 있습니다. 실제로는 실버 라이트 5를 지원할 필요가 없습니다. 그러나 이것을 제거 할 수는 없습니다. 실버 라이트 5 지원.

+0

정말이에요? MSDN은이를 PCL에서 사용 가능한 것으로 나열합니다. – CodesInChaos

+0

PCL 사용 가능성은 대상 플랫폼에 따라 다릅니다. 내가 볼 수있는 한, * Silverlight * 또는 * Windows Phone * 8.0 이전에 'MidpointRounding' 인수가 포함 된'Math.Round' 오버로드가 없습니다. * .NET Framework *, * Windows Store * 및 * Windows Phone 8 *과 같은 타겟팅을 사용하는 것이 좋으면 코드에'Math.Round'의 'MidpointRounding' 오버로드를 통합 할 수 있습니다. –

+1

예 Anders Gustafsson .. 나는 그렇게 생각한다. 나는 silverlight 5도 목표로하고있다. 그러나 나는 silverlight 5를 제거하려 할 때, 다른 모든 기능을 지원한다고 말하고있다. 나는 "Xmarin.Android", xamarin을 선택했다. IOs "와 dotnet 프레임 워크 4.5 –

답변

0

올바르게 선택 했습니까? 휴대용 클래스 라이브러리

은 그렇지가 : MSDN에 따르면 당신이

에서 지원 휴대용 클래스 라이브러리가 읽을 수 버전 정보에서

PCL

에서 지원해야한다 소수점 이하의 정수로만 변환 할 필요가있는 경우, 반올림 기능을 사용하지 않고도 동일한 결과를 얻는 간단한 트릭 :

roundedValue = (int)(valueToRound + 0.5) 

.5 이상이 다음 정수와 소수점 이하 자릿수 오프 int 인하 캐스트로 요약한다면 값이 끝나는 경우. 그렇지 않으면 .499.. 값이 작을수록 충분하지 않으며 다시 캐스팅하여 int 자릿수로 자릅니다.

+0

그 트릭이 -0.7과 함께 작동합니까? –

+0

예'0.7 + 0.5'는'1.2'이고,''1.2''는''int''에 캐스트됩니다. 물론 다른 숫자로 돌릴 수는 없습니다 소수 자릿수, 정수 만 – peter

0

MSDN에 따르면이 방법은 PCL에서 지원됩니다. 4, 3.5 SP1

: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

지원 .NET Framework Client Profile

에서 지원

.NET 프레임 워크

에서 지원

휴대용 클래스 라이브러리

에서 지원 휴대용 클래스 라이브러리

윈도우 스토어 .NET은에

가 지원되는 애플 리케이션 : 나는 작은 테스트 프로젝트 (PCL)를 만든 윈도우 8

이 나를 위해 작동합니다

3

이것은 의도적으로 설계된 것으로, 전화 접속이 끊어지는 Silverlight입니다. .NETCore 하위 집합에 속하며 Phone7 및 .NET Compact Framework와 같은 다른 프레임 워크가이 집합에 속합니다.주요 목표는 가능한 한 컴팩트하게 .NET을 설치하는 것입니다. 실버 라이트는 사용자가 넷플 릭스와 같은 웹 사이트를 필요로하는 웹 사이트를 방문 할 때 10 초 이내에 다운로드하는 것이 강하게 목표였습니다. 물론 CLR과 프레임 워크 모두에서 큰 덩어리를 빼내는 것만으로도 작업 할 수 있습니다. Math.Round() 오버로드는 사용하기 위해 잘 렸습니다.

PCL 프로젝트에서 볼 수있는 것은 자동 결과입니다. 타겟 플랫폼 중 하나에서 사용할 수없는 클래스와 메소드를 사용하지 못하도록하여 프로그램을 숨기 만하면 프로그램이 실패하게 만듭니다.

사용 가능한 제품으로 만들어야합니다. MidpointRounding.ToEven을 기본값으로 설정합니다. 가능한 해결 방법은 10의 제곱으로 곱하고 0을 반올림 한 다음 0으로 반올림 한 다음 다시 나누는 것입니다.