我正在尝试将一个字符串解析为最终具有%字符的NSNumber,我可以在该系列的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的值...重点是,如果我从字符串中删除“%”,我将在值上得到null。
所以,我需要得到一个值为(即)30%的NSNumber(换句话说,numberString +“%”)。
我怎样才能得到它?
更清楚的是,我正在努力实现这一目标:
由于ShinobiChart采用NSNumber类型的值而我的 RepliesShare 是小数,我正在尝试将我的小数从33.00转换为33%。 ShinobiChart不接受字符串,否则我会处理它。我发现NSNumber可以用NSNumberFormatted格式化,所以我认为我可以使用它,因为Chart需要一个数字。
答案 0 :(得分:3)
NSNumberFormatter
做两件事(其中包括):
NSString
翻译成NSNumber
(@“25.4%”→@“0.254”)NSNumber
翻译成格式化NSString
(@“0.254”→@“25.4%”)你的问题并不是很清楚,但我认为你正在尝试做这两个选项中的后一个,但是你正在使用第一个方法。
以下内容将使用NSNumber
对象并将其转换为%年龄格式的字符串:
var formatter = new NSNumberFormatter();
formatter.NumberStyle = NSNumberFormatterStyle.Percent;
formatter.Locale = NSLocale.CurrentLocale;
var value = formatter.stringFromNumber(new NSNumber(0.254));
这将导致value
成为代表NSString
的{{1}}。
如果25.4%
对象上的RepliesShare
属性为answer
,那么您可以执行以下操作来获取所需的字符串:
NSNumber
希望有所帮助。
注意:我使用var value = formatter.stringFromNumber(answers.RepliesShare);
而不是new NSLocale ("en_US")
。这将确保结果字符串是适合当前用户设备的格式化程序。这与百分比最明显的影响是,在某些欧洲国家/地区,逗号NSLocale.CurrentLocale
用作小数点分隔符而不是句点,
。
答案 1 :(得分:2)
SChartDonutSeries
(以及SChartPieSeries
)对象具有LabelFormatString
属性。这需要一个字符串,用于格式化这些标签。它具有与NSNumberFormatter
中使用的语法相同的语法。因此,要获得所需的行为,请在LabelFormatString
子类中创建系列对象后设置SChartDataSource
:
var series = new SChartDonutSeries();
series.LabelFormatString = "%0.2f%%";
这会将数字格式化为2位小数,并在末尾添加百分号。即25.462
→25.46%
。适当调整格式字符串以获得所需的格式。请注意,要显示%
符号,您需要将其撤消 - %%
。
有关创建适当格式字符串的更多详细信息,请访问: https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Strings/Articles/formatSpecifiers.html
答案 2 :(得分:1)
我认为你误解了NSNumberFormatter
的所作所为。它与NSNumber
个对象没有任何关系。
NSNumberFormatter
是用于处理碰巧包含数值的字符串的对象。它不适用于NSNumber
。
由于ShinobiChart采用NSNumber类型的值而我的回复分享是小数,我试图将我的小数从33.00转换为33%。
您不想转换任何内容,只需将33.00
作为十进制类型提供给ShinobiChart。我认为 Xamarin会自动将您的C#小数转换为NSNumber
。
如果它不起作用,请尝试将new NSNumber(33.00)
提供给ShinobiChart。任何地方都应该没有百分比。你绝对不想创建一个NSNumberFormatter