8

我想将我的 NSNumberformatter 从显示带括号的负数更改为将减号放在前面(或任何本地化标准)。

我假设我可以用 setNegativeFormat 做到这一点:

但是阅读 Apple 的非常详尽的文档,我只能摸不着头脑:


设置负格式:

设置接收器用于显示负值的格式。

- (void)setNegativeFormat:(NSString *)aFormat

参数 aFormat 一个字符串,它指定负值的格式。

可用性 适用于 iPhone OS 2.0 及更高版本。

另见 - 负格式

NSNumberFormatter.h中声明


我对 aFormat 有什么选择?!?来吧Doc Writers,这里的链接会杀了你吗?

编辑:这是值得的声明:

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

保留本地化的货币符号和小数位对我来说很重要,无论它们是什么。所以 [currencyFormatter setNegativeFormat:@"-#,##0.00"] 可能无法工作,因为缺少货币并且不能为所有货币假设 2 位小数。

4

4 回答 4

18

如果您查看Cocoa 的数据格式化编程指南中的“格式化字符串”部分:

格式字符串使用Unicode 技术标准 #35中的格式模式(此参考是版本 tr35-6;Mac OS X v10.4 的格式化程序使用版本tr35-4)。

编辑:

如果要设置基于货币的格式字符串,可以使用¤字符,例如:

[formatter setFormat:@"¤#,##0.00"];

这将添加当前本地化的货币符号来代替¤字符。

因此,将相同的概念应用于否定格式字符串:

[formatter setFormat:@"-¤#,##0.00"];

这也将应用货币符号代替¤当前本地化的 。

于 2009-06-18T07:27:21.407 回答
2

好的,所以我得到的答案是:

[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];

关键是什么?字符“¤”。不知道叫什么?任何人?但它以这些格式字符串表示本地化货币...

于 2009-06-18T08:05:31.407 回答
1

在这种情况下,它正在寻找格式 NSString。 在此处查找格式字符串详细信息

如果你想让负数的12,345.67显示为-12,345.67,那么我相信正确的 NSString 值是@"-#,##0.00"

我还在上面链接的文档中注意到以下句子:

如果您没有为负值指定格式,则使用为正值指定的格式,前面带有一个减号 (-)。

编辑: 10.4 及更高版本
的更新: 这是描述 10.4 及更高版本行为的 PDF
并且,从该文档链接,这里是10.4 及更高版本所需格式的数据
从本文档看来,正确的字符串可能是:@"-#,##0.##"

于 2009-06-18T07:18:55.493 回答
1

给出的所有答案都假设货币保留两位小数,并且还使用逗号作为千位分隔符。显然有许多货币不符合这个标准,http ://en.wikipedia.org/wiki/Decimal_mark ,所以我使用以下技术

    NSString * formattedBalance = [currencyFormatter stringFromNumber:balance];
    if([formattedBalance rangeOfString:@"("].location != NSNotFound ) {
        formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]];
    }
于 2014-07-10T16:06:26.353 回答