2014-03-05 56 views
3

我正在將我的功能從普通類庫轉換爲PCL。 在正常的c#類庫中,我們可以將三個參數傳遞給math.Round函數以四捨五入一個十進制數。 此前我們已經使用了類似math.Round以下PCL中的Math.Round函數

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

但在PCL我可以看到「MidpointRounding.AwayFromZero」列舉並不available.Can我做PCL相同的操作?

我正在將我的PCL定位到「.Net framework 4.5」,「Xamarin.IOs」,「Xmarain.Android」和Silverlight 5.其實我不需要支持PCL silverlight 5.但我無法刪除此silverlight 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 framework 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'爲'1',但當然不能捨入不同的數字的小數位,只對整數 – peter

0

根據MSDN該方法在PCL中受支持。

.NET框架

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

.NET框架客戶端配置文件

支持:4,3.5 SP1

便攜式類庫

支持:可移植類庫

.NET的Windows Store應用程序

支持:Windows 8中

我創建了一個小的測試項目(PCL),這對我的作品:

decimal d = Math.Round(0.555555M, 2, MidpointRounding.AwayFromZero); 
3

這是設計,這是Silverlight是掛斷。它屬於.NETCore子集,其他框架如Phone7和.NET Compact Framework都在該集合中。主要目標是使.NET安裝儘可能緊湊,以便Silverlight在10秒或更短時間內下載運行時,當用戶訪問需要它的網站時(例如Netflix),這是一個強有力的目標。這當然只能從CLR和框架中減去大塊,Math.Round()超載你想使用被切斷到達那裏。

因此,您在PCL項目中看到的是自動結果。它保護您不使用目標平臺上不可用的類和方法,從而使您的程序失敗,只需隱藏它們即可。

你將不得不與你有什麼可用。你會得到MidpointRounding.ToEven,默認值。一種可能的解決方法是乘以10的冪,加0.5,舍入爲0的數字,然後再除。