0

我正在尝试将一个字符串解析为一个 NSNumber,该 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%(换句话说,numberString+"%")的 NSNumber。

我怎么才能得到它?

更清楚地说,我正在努力实现这一目标:

忍者图

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

4

3 回答 3

3

NSNumberFormatters 做两件事(除其他外):

  1. 将格式化的数字NSString转换为NSNumber(@"25.4%" → @"0.254")
  2. 将 anNSNumber转换为格式化的NSString(@"0.254" → @"25.4%")

你的问题不是很清楚,但我认为你正在尝试做这两个选项中的后者,但你正在使用第一个方法。

以下将获取一个NSNumber对象并将其转换为 %age 格式的字符串:

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对象上的属性是 anNSNumber那么您可以执行以下操作来获取您需要的字符串:

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

希望有帮助。

注意:new NSLocale ("en_US")我没有在这里使用,而是使用NSLocale.CurrentLocale. 这将确保生成的字符串是适合当前用户设备的格式化程序。这对百分比产生的最明显影响是,在一些欧洲国家/地区,逗号,用作小数分隔符而不是句点.

于 2014-04-13T06:25:39.660 回答
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

于 2014-04-14T09:33:17.007 回答
1

我认为你误解了什么NSNumberFormatterNSNumber它与对象完全无关。

NSNumberFormatter是一个用于处理恰好包含数值的字符串的对象。它不适用于使用NSNumber.

由于 ShinobiChart 采用 NSNumber 类型的值,而我的 RepliesShare 是小数,我正在尝试将我的小数从 33.00 转换为 33%。

您不想转换任何内容,只需将33.00十进制类型提供给 ShinobiChart。我认为Xamarin 会自动将您的 C# 十进制转换为NSNumber

如果它不起作用,请尝试给new NSNumber(33.00)ShinobiChart。任何地方都不应该有百分比。你绝对不想创建一个 NSNumberFormatter

于 2014-04-14T04:29:24.007 回答