2014-04-13 66 views
0

我想獲得一個字符串解析成最終的%字符的NSNumber,我可以在該系列的ShinobiChart值屬性中使用。NSNumberFormatter返回null在Xamarin.iOS + ShinobiChart

考慮下面的代碼,我創建了NSNumberFormatter:

var formatter = new NSNumberFormatter(); 
      formatter.NumberStyle = NSNumberFormatterStyle.Percent; 
      var locale = new NSLocale ("en_US"); 
      formatter.Locale = locale; 

現在,我將嘗試使用格式化來獲取值圖表片標籤:

var value = formatter.NumberFromString (answer.RepliesShare.ToString() + "%"); 

這會給我0.33的值......重點是,如果我從字符串中刪除「%」,那麼值將爲空。因此,我需要得到一個值爲(即)30%(換句話說,numberString +「%」)的NSNumber。

我該如何得到它?

更清楚,我想實現這一點:

ShinobiChart

由於ShinobiChart需要類型的NSNumber和我RepliesShare的值是一個十進制我想只是轉換我的十進制從33.00到33%。 ShinobiChart不接受字符串,否則我會處理它。我發現NSNumber可以使用NSNumberFormatted格式化,所以我認爲我可以使用它,因爲Chart需要一個數字。

+1

我很困惑。你想做什麼? –

+0

請看現在更多的細節。 –

回答

2

A SChartDonutSeries(因此SChartPieSeries)對象具有LabelFormatString屬性。這需要一個字符串並用于格式化這些標籤。它與NSNumberFormatter中使用的語法相同。因此,爲了得到你想要的行爲,設置LabelFormatString您已經創建了一系列的對象後,您的SChartDataSource子類:

var series = new SChartDonutSeries(); 
series.LabelFormatString = "%0.2f%%"; 

這將格式化數字爲2位小數放置在末端百分號。即25.46225.46%。適當調整格式字符串以獲得您想要的格式。請記住,要獲得%標誌,您需要轉義它 - %%

創造一個合適的格式字符串進一步詳情,可瀏覽這裏: https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Strings/Articles/formatSpecifiers.html

+0

非常感謝!有效! :) –

3

NSNumberFormatter就做兩件事情(其中包括):

  1. 翻譯格式化數字NSStringNSNumber(@ 「25.4%」 →@ 「0.254」)
  2. 翻譯的NSNumber成一個格式化NSString (@「0.254」→@「25.4%」)

從你的問題來看,這不是很清楚,但我認爲你正在嘗試做這兩個選項中的後者,但是你正在使用方法fo第一個。

以下將採取NSNumber對象和把它變成%年齡格式的字符串:

var formatter = new NSNumberFormatter(); 
formatter.NumberStyle = NSNumberFormatterStyle.Percent; 
formatter.Locale = NSLocale.CurrentLocale; 
var value = formatter.stringFromNumber(new NSNumber(0.254)); 

這將導致value作爲一個NSString代表25.4%

只要RepliesShare財產您answer對象是一個NSNumber那麼你可以做以下獲得您所需要的字符串:幫助

var value = formatter.stringFromNumber(answers.RepliesShare); 

希望。

注意:而不是使用new NSLocale ("en_US")在這裏我用NSLocale.CurrentLocale。這將確保結果字符串適合當前用戶設備的格式。這種百分比最明顯的影響是,在某些歐洲國家,逗號,用作小數點分隔符而不是句號.

+0

謝謝您澄清NSNumberFormatter的作用。請在我想要實現的帖子中查看更多細節。 –

+0

我已經添加了一個新的答案來解決這個問題以及 – sammyd

1

我認爲你誤解了NSNumberFormatter的功能。它與NSNumber對象沒有任何關係。

NSNumberFormatter是一個與字符串一起使用的對象,它恰好包含數字值。它不適用於NSNumber

由於ShinobiChart需要類型NSNumber的值和我的RepliesShare是一個小數,我試圖將我的小數從33.00轉換爲33%。

你不想轉換任何東西,只需將33.00作爲十進制類型給ShinobiChart。我認爲 Xamarin會自動將您的C#小數轉換爲NSNumber

如果它不起作用,請嘗試給ShinobiChart提供new NSNumber(33.00)。應該沒有任何百分比。您絕對不想創建一個NSNumberFormatter對象具有LabelFormatString屬性

+0

謝謝你的答覆! –