将NSNumberFormatter的负格式从(xxx.xx)更改为-xxx.xx
-
06-07-2019 - |
题
我想更改我的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];
对我来说,保留本地化的货币符号&amp;小数点放置它们可能是什么。因此,[currencyFormatter setNegativeFormat:@&quot; - #,## 0.00&quot;]可能无法正常工作,因为货币缺失,并且不能为所有货币假设2位小数。
解决方案
如果您看一下“格式字符串”, 中的部分数据格式编程指南适用于Cocoa :
格式字符串使用 Unicode技术标准#35 的格式模式(此参考版本为tr35-6; Mac OS X v10.4的格式化程序使用版本 tr35-4 )。
修改强>
如果要根据货币设置格式字符串,可以使用&#164;
字符,例如:
[formatter setFormat:@"¤#,##0.00"];
这将添加当前本地化的货币符号,而不是&#164;
字符。
因此,将相同的概念应用于否定格式字符串:
[formatter setFormat:@"-¤#,##0.00"];
这也将使用货币符号代替当前本地化的&#164;
。
其他提示
好的,所以我开始工作的答案是:
[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
关键是这个什么?字符“&#164;”。不知道它叫什么?任何人?但它代表这些格式字符串中的本地化货币......
在这种情况下,它正在寻找格式NSString。 在此处查看格式字符串详细信息。
如果您希望 12,345.67
的否定显示为 -12,345.67
,那么我相信正确的NSString值是 @&quot; - #,## 0.00 &QUOT; 代码>
我还注意到上面链接的文件中的以下句子:
如果您没有指定格式 负值,指定的格式 使用前面的正值 用减号( - )。
编辑:结果
10.4及之后的更新:这是描述10.4及之后行为的PDF
并且,从该文档链接,这里是所需的数据格式为10.4及之后。
从这个文档看,正确的字符串可能是: @&quot; - #,## 0。##&quot;
给出的所有答案都假设货币是小数点后两位,并且使用逗号作为千位分隔符。很明显,有许多货币不符合这一标准, 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:@"" ]];
}