2014-04-13 33 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

谢谢你的答复! –