将NSNumberFormatter的负格式从(xxx.xx)更改为-xxx.xx

时间:2009-06-18 07:04:31

标签: cocoa cocoa-touch number-formatting negative-number

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

我认为我可以用setNegativeFormat:

来做到这一点

但是阅读Apple的哦,如此彻底的文档让我感到头疼:


setNegativeFormat:

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

- (void)setNegativeFormat:(NSString *)aFormat

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

状况 适用于iPhone OS 2.0及更高版本。

另见 - negativeFormat

声明 NSNumberFormatter.h


我对aFormat的选择是什么?!?来自Doc Docrs,这里的链接会杀了你吗?

编辑:这里有什么值得宣言:

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

对我来说,保留本地化的货币符号&小数点放置它们可能是什么。因此,[currencyFormatter setNegativeFormat:@“ - #,## 0.00”]可能无法正常工作,因为货币缺失,并且不能为所有货币假设2位小数。

4 个答案:

答案 0 :(得分:18)

如果您查看Data Formatting Programming Guide For Cocoa中的“格式字符串”部分:

  

格式字符串使用Unicode Technical Standard #35中的格式模式(此引用是版本tr35-6; Mac OS X v10.4的格式化程序使用版本tr35-4)。

修改

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

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

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

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

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

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

答案 1 :(得分:1)

在这种情况下,它正在寻找格式NSString。 Look here for format string details

如果您希望12,345.67的否定显示为-12,345.67,那么我认为正确的NSString值为@"-#,##0.00"

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

  

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

编辑:
10.4及之后的更新:Here is a PDF describing behavior in 10.4 and after
并且,从该文件链接,这里是data on the required format for 10.4 and after
从本文档中可以看出正确的字符串可能是:@"-#,##0.##"

答案 2 :(得分:1)

好的,所以我开始工作的答案是:

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

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

答案 3 :(得分: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:@"" ]];
    }