NSNumberFormatter在Xamarin.iOS + ShinobiChart中返回null

时间:2014-04-13 00:50:36

标签: ios xamarin.ios xamarin shinobi

我正在尝试将一个字符串解析为最终具有%字符的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

由于ShinobiChart采用NSNumber类型的值而我的 RepliesShare 是小数,我正在尝试将我的小数从33.00转换为33%。 ShinobiChart不接受字符串,否则我会处理它。我发现NSNumber可以用NSNumberFormatted格式化,所以我认为我可以使用它,因为Chart需要一个数字。

3 个答案:

答案 0 :(得分:3)

NSNumberFormatter做两件事(其中包括):

  1. 将格式化的数字NSString翻译成NSNumber(@“25.4%”→@“0.254”)
  2. NSNumber翻译成格式化NSString(@“0.254”→@“25.4%”)
  3. 你的问题并不是很清楚,但我认为你正在尝试做这两个选项中的后一个,但是你正在使用第一个方法。

    以下内容将使用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.46225.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