我想更改我的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位小数。
答案 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:@"" ]];
}